冲突可以说是两个分支的冲突,具体是:两个已经提交的分支的相同文件相同位置的的不同修改内容进行合并时产生的。
通常情况下我们在团队分工工作时,易出现本地分支和远程分支冲突,或是自己开发用的分支与项目主分支冲突。常见的解决办法是:
出现冲突后可以暂存本地修改git stash ,然后git pull 更新代码,出现冲突文件,你会在文件中发现<<<<<<< HEAD ,======= ,>>>>>>> 这种标记。
<<<<<<< HEAD和=======中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码自己确定保留那一部分代码,最后删除<<<<<<< HEAD ,======= ,>>>>>>>这种标志。
找到并解决,然后git add, commit最后push。
当然最好的办法是平时多注意更新代码,先merge再push,很久没merge了,先merge再写代码;将项目的结构整理清晰,不同的人负责不同模块,少去修改别人的文件,即使编辑同一份文件,也尽量修改各自的函数;每个人签出自己的分支来操作,不要直接提交到主分支,每次merge之前主管review一下 。
然后是最近经常碰到的pull request的冲突。我们在fork别人仓库代码之后,在提交PR后,仓库的主人同时也做了修改,导致了冲突。解决办法github等网站已经给出,简单讲就是:(例子中本地分支和远程分支都是master,处理冲突时需要按实际做修改)
先在自己的代码仓库创建一个新的分支
git checkout -b 创建的分支名 master
拉取对方的代码
git pull https:XXXX.git master
接着会发现文件出现冲突,像上面解决冲突的方法一样去手动解决<<<<<<< HEAD ,======= ,>>>>>>>
最后提交修改,将新分支合并到master
git commit
git checkout master
git merge 创建的分支名
git push origin master