甲、乙两个人共同维护同一个分支[feature],包含a~f等文件
一、不同人修改了不同文件的处理
-
甲修改了a文件后提交到远程分支
-
乙拉取远端分支,修改b文件,此时甲又更新了a文件并提交到远程,乙push会报错!!!
- 乙正常操作如下,执行
push
后会报错:
git fetch origin git checkout -b feature // 创建并切换到feature分支 // 修改 b 文件后提交 git add . git commit -m 'Fix bug' git push origin 复制代码
- 解决办法:
git fetch origin git merge origin/feature git push origin 复制代码
- 乙正常操作如下,执行
建议push前先拉取远端的代码,若有改动,则合并后再push
二、不同人修改相同文件的不同区域的处理
-
甲修改了文件c并
push
到远端 -
乙也修改了文件c(不同位置),进行
push
报错- 解决办法:
git fetch git merge origin/feature git push 复制代码
三、不同人修改相同文件的同一区域的处理
-
乙修改了文件d并
push
到远端 -
甲也修改了文件d(同一位置),进行
push
报错- 解决办法:
git pull // 将远程主机分支最新内容拉下来后与当前本地分支直接合并 fetch + merge // 因为修改同一文件的相同区域,合并时会有冲突,须手动解决, // 打开文件对相同区域的内容进行修改(修改为最终合适的内容:即甲乙都需要),然后再提交 git commit -m 'Resolved Conflit d' git push origin 复制代码
四、不同人同时变更了文件名和文件内容的处理
-
甲修改了文件e的名称并
push
到远端 -
乙修改了文件e中的内容,进行
push
报错- 解决办法:
git pull git push origin 复制代码
解读git的文件存储:git存放blob文件时是以文件内容来区分的,并不以文件名来区分;此处的变更文件名操作和变更文件内容的操作能够自动被git处理,原因就在于blob文件并没有发生修改的冲突。而如果其中一个人既变更了文件名又修改了文件,同时另一个人也修改了该文件的同一位置的内容,就会被git识别为冲突,而不能自动进行处理了,需参考上种个情况进行处理。
五、不同人把同一文件改成了不同的文件名的处理(文件内容一致)
-
甲修改了文件f的名称并
push
到远端 -
乙也修改了文件f中的名称,进行
push
报错- 解决办法:
git pull // 报错冲突 // 两人协商解决冲突 // 解决冲突后,乙重新生成commit,再push git commit -m 'Resolved Conflit f' git push origin 复制代码
六、总结
- push前一定先pull
- 合并冲突,非自己的变动保持原样,和自己冲突的代码找相应的代码提交人确认如何解决冲突
- 合并完成后,保证本地能编译能运行再push
- 合并到主干的代码必须通过测试,必须通过代码review
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END