Git冲突解决方案
背景
假设多人协作是基于dev开发,每个人开发时,从dev拉取新的分支进行开发。
冲突场景
假设work1从dev拉取了分支branch_work1进行开发;work2从dev拉取了分支branch_work2进行开发。
而work1先完成了代码提交,并合并到了dev上。
那么当work2完成工作后往dev合并时,如果他们两个人没有同时修改一个文件,那么work2可以顺利合并到dev上。
但是如果他们两个修改了同一个文件,这时work2进行合并到dev时,会提示『There are merge conflicts.』。这时,work2是需要先合并且手动解决冲突后,方可合并到dev上。
注意:
执行冲突合并操作时,务必保证本地代码都已提交。不要没提交代码,就来执行merge/pull或者rebase操作。
解决冲突方法
方案一:merge
- 如果branch_work2分支有多个人参与开发,那么建议采用此方法
- 如果当前分支含有多个提交,而且与dev分支长时间未合并同步代码,那么建议采用此方法
1 | git pull origin dev // 前提是当前在branch_work2分支上 |
方案二: rebase
如果branch_work2分支只有你一个人参与开发,那么建议采用此方法
1 | git pull --rebase origin dev // 前提是当前在branch_work2分支上 |
merge 和 rebase 方案对比
- merge 方案不会改变历史,因此解决冲突后推送到远程时不需要加-f强制推送。但是提交历史会多一次合并提交。
- rebase 方案尽管让提交树看起来很线性,没有多产生一次合并提交。但是他改变了历史,因此解决冲突后需要加-f强制推送。也正是这个原因,当别人也参与branch_work2分支开发时,不应该选用此方案,避免给其他同事带来伤害。