git警告如下图
这种情况通常发生在:
你本地有未推送的提交
同时远程也有你本地没有的新提交
两个分支的历史产生了分歧
解决:
方案一:使用合并(merge)- 最安全
bash
1. 设置为默认使用合并策略
git config pull.rebase false
2. 或者单次使用合并
git pull --no-rebase
特点:会创建一个新的合并提交,保留完整的历史记录
方案二:使用变基(rebase)- 保持历史线性
bash
1. 设置为默认使用变基策略
git config pull.rebase true
2. 或者单次使用变基
git pull --rebase
特点:将你的本地提交"重放"在远程最新提交之后,保持历史为直线
为了避免每次都需要选择,可以设置全局默认行为:
bash
大多数人习惯使用变基(rebase),保持线性历史
git config --global pull.rebase true
或者使用合并(merge),保留完整分支历史
git config --global pull.rebase false
重要提醒
变基(rebase)会重写提交历史:如果已经将分支推送到远程,且其他人基于该分支工作,不要使用 rebase
查看差异:在操作前,建议先查看差异:
bash
git log --oneline origin/master master # 查看本地有而远程没有的提交
git log --oneline master origin/master # 查看远程有而本地没有的提交
总结:个人项目推荐使用 rebase,团队项目推荐使用 merge。