冲突
git非常适合多个开发者对同一软件做多出修改时来合并它们所修改的代码.但是在合并的过程中往往出现git无法自动化解决的冲突.
- 编辑冲突:通常发生在两个开发者对同一行代码做了不同的修改.git无法确定哪个修改时正确的.
- 内容冲突:通常发在两个开发者对某份代码的几个部分做出了各自的修改的时候.例如这种情况就容易导致这种冲突:当一个开发者修改了某一函数,另一个开发者再同一时间修改了同一函数.
编辑冲突
当git遇到无法自己解决的冲突的时候,会显示以下错误信息.
> git merge dev dev
Auto-merging poet.txt
CONFLICT (content): Merge conflict in poet.txt
Automatic merge failed; fix conflicts and then commit the result.
具体发生了什么:
- 我们必须先解决问题,然后手动创建提交
- .git/MERGE_HEAD中将保存另有分支的提交散列值.
- 工作区中的文件代表了合并的结果
- 无冲突部分的修改合并将被记录在暂存区当中,以便纳入下一次提交
- 将会有冲突标志被插入.
- 冲突所在之处将不会被注册到下一次提交中.
冲突标志
我们查看冲突的文件
<<<<<<< HEAD
黑日依山尽
=======
黄日依山尽
>>>>>>> dev
黄河入海流
欲穷千里目
更上一层楼
首先是修改的行在当前分支HEAD的内容,接下来是这一行在另一分支的内容.
解决冲突
手动合并
- 编辑受影响的文件
对每一次冲突所在之处修改成自己想要的内容.然后删除冲突的标志,但是这种方法不适合二进制文件.我们采取下面步骤 - 使用–our是或者–theirs选项.
> git checkout --theirs poet.txt
接下来进行正常的提交过程
> git add poet.txt
> git commit -m "merge" poet.txt