1. 提交时发现冲突
情形:甲和乙共同开发一个项目,原本甲开发A功能,乙开发B功能,互不干扰。然而其中一个配置文件是A和B功能都依赖的。有一天乙修改了这个配置文件,比如多加了B功能需要的参数,然后提交了他的修改。刚好此时甲也因为A功能需要编辑这个配置文件,于是甲在不知道乙修改了配置文件的情况下他也修改了配置文件(如果甲知道乙修改了这个配置文件的话,他可以等乙保存并push上远程仓库后他再 pull 下来,这样就不会引起后面的冲突了)。甲在修改了配置文件后很开心的想要提交后下班了,此时他发现提交时出现了一个错误提示,吓得他顿时菊花一紧!,错误提示为:
To http://xxx.xxx.xxx/group_name/project_name.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'http://xxx.xxx.xxx/group_name/project_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
意思是提交被拒绝了,因为远程仓库上的修改了某个文件,而甲也修改了某个文件并且想要提交这个文件,于是就冲突了!
解决方法:按照提示,先执行 git pull 将远程仓库的更新拉下来,并修改冲突的文件。
于是甲便乖乖地 pull 下来,发现乙修改了配置文件也不跟他说一声,导致冲突,最后甲不得不接收乙对配置文件的修改(意味着暂时要放弃自己对配置文件的修改):
git checkout --theirs .
这里补充一下合并冲突的命令
用的是 git checkout 命令,但是需要指定参数
--ours:舍弃它们的,使用我们的修改
--theirs:舍弃我们的,使用它们的修改
例如:
对于 main.py 这个文件,使用它们的修改,放弃我们的修改
git checkout --theirs main.py
全部使用它们的修改
git checkout --theirs .
因为他之前肯定是提交了再 push 然后发现提交不了的,所以此时他要再执行:
git add .
git commit -m "accept conf change for B and featureB"
最后再修改配置文件添加自己的配置,最后再提交并push
最终远程仓库会多出一条因为甲处理冲突而产生的历史版本记录:accept conf change for B and featureB
2. 合并冲突发现冲突
甲在A分支改了某个文件并提交了,乙在B分支改了相同的文件并提交了,甲想要合并乙的工作,此时发现冲突了
解决方法:跟上面一样。。。
网友评论