Git合并上游代码冲突求助:Fork开源项目后上游大量提交引发冲突
嘿,这情况我太熟悉了!上游仓库几千次提交堆下来,合并时撞冲突简直是家常便饭,别担心,咱们一步步把它捋顺:
先确认基础操作没跑偏
首先你得确保自己正处在本地的master分支上,不然操作错分支就麻烦了:
git checkout master
如果你的master上还有没提交的本地修改,先把它们临时存起来(之后可以恢复):
git stash
核心冲突解决流程
接下来咱们分两种方式处理,推荐用rebase让提交历史更干净,但merge也完全可行:
方式一:用Rebase同步上游(推荐)
因为上游有大量更新,rebase会把你的本地提交“挪”到上游最新提交的后面,历史线更清晰:
- 先拉取上游最新代码:
git fetch upstream
- 开始rebase:
git rebase upstream/master
这时候Git会暂停,提示你哪些文件有冲突。
- 手动解决冲突:
打开冲突的文件,你会看到类似这样的标记:
<<<<<<< HEAD # 你的本地代码内容 ======= # 上游仓库的代码内容 >>>>>>> upstream/master
删掉这些标记,保留你需要的代码(可以是两者的结合,也可以选其中一方)。
- 标记冲突已解决:
处理完一个文件后,告诉Git这个文件没问题了:
git add <冲突文件的路径>
- 继续rebase流程:
git rebase --continue
如果还有其他冲突,重复步骤3-5就行;要是中途想放弃,直接跑:
git rebase --abort
方式二:用Merge同步上游
如果你更习惯merge的方式,流程是这样的:
- 同样先拉取上游最新代码:
git fetch upstream
- 开始合并:
git merge upstream/master
- 解决冲突的步骤和rebase一样:打开文件处理标记,
git add标记已解决,然后:
git merge --continue
想放弃的话就用:
git merge --abort
一些能帮你省时间的小技巧
- 用可视化工具解决冲突:手动看标记眼晕?试试Git自带的合并工具:
git mergetool
它会弹出可视化界面,帮你对比两边的代码,点几下就能搞定冲突。
- 先在开发分支处理冲突:其实更稳妥的做法是先切到你的开发分支,把上游
master合并过去(git checkout your-dev-branch->git merge upstream/master),处理完冲突后再合并到本地master,这样就算搞砸了也不会影响master分支。 - 定期同步上游:以后别等1000次提交才同步!每隔几天跑一遍
git fetch upstream && git rebase upstream/master,冲突会少很多,解决起来也轻松。
内容的提问来源于stack exchange,提问作者ujjwal gupta
相关产品推荐
相关产品推荐

