使用Git Bash操作Git(七):解决同一文件中的同行冲突
2017-04-19 本文已影响68人
李程鹏
使用Git Bash操作Git(七):解决同一文件中的同行冲突
场景:开发人员1修改了README.md文件,然后将它提交到了中央仓库中。开发人员2不知道有人修改了README.md文件,就没有对它进行更新。后来,开发人员2也去修改了这个README.md文件,当他尝试将修改后的内容提交到中央仓库时,就产生了冲突。
1 开发人员1修改文件
开发人员1在README.md文件的末尾插入内容“Developer1 do something here!”:
![](https://img.haomeiwen.com/i4789080/cf75106631d86d2d.png)
修改完成后,开发人员1将修改后的文件提交到远程的中央仓库中:
![](https://img.haomeiwen.com/i4789080/a5367a88263a6207.png)
2 开发人员2修改文件
开发人员2在README.md文件的末尾插入内容“Developer2 do something here!”(开发人员1与开发人员2修改了同一文件中的同一行):
![](https://img.haomeiwen.com/i4789080/79215e07fa7969b8.png)
修改完成后,当他尝试将修改后的内容推送到中央服务器时,Git会拒绝这个请求,然后提示他需要先进行更新操作:
![](https://img.haomeiwen.com/i4789080/265508460c333c00.png)
3 开发人员2更新文件
开发人员2输入“git pull”指令来更新文件,但是操作失败。因为两个人修改了文件的同一个地方,所以在文件合并的过程中会发生冲突。
![](https://img.haomeiwen.com/i4789080/556e657361c23c97.png)
看看冲突的文件内容:
![](https://img.haomeiwen.com/i4789080/ba8f731dafc04dc2.png)
4 使用合并工具解决冲突
可以使用下面的指令打开合并工具:
git mergetool
beyond compare
具体的操作如图所示:
![](https://img.haomeiwen.com/i4789080/728b76e4def375d2.png)
打开了合并工具后,只看红色行的内容。如果两边的内容一样,就随便选一边。如果两边的内容不一样,那根据情况指定它们出现的顺序。操作完成后记得点击保存按钮。具体的操作如下图所示:
![](https://img.haomeiwen.com/i4789080/31453d01964f017b.gif)
合并完成后,命令行窗口显示目前还处于合并状态:
![](https://img.haomeiwen.com/i4789080/e7faff8722396026.png)
5 开发人员2提交文件
合并完成后,开发人员2就可以将合并的结果提交到自己的本地仓库中。使用的指令是:
git commit -a
其中“-a”表示提交当前目录下的所有内容。
具体的操作如图所示:
![](https://img.haomeiwen.com/i4789080/416492052eb19446.png)
提交的时候需要填写这次合并的备注信息:
![](https://img.haomeiwen.com/i4789080/70d1c9c84f6b9a41.png)
接着,将这次的合并结果推送到远程的中央服务器:
![](https://img.haomeiwen.com/i4789080/68eec353617012d4.png)
最后,手动删除冲突备份文件(在使用命令行操作的时候,Git不会帮我们去删除这些备份文件):
![](https://img.haomeiwen.com/i4789080/eda279e97259f3a1.png)
6 开发人员1更新文件
开发人员2修改了文件后,开发人员1可以更新下来查看修改的结果:
![](https://img.haomeiwen.com/i4789080/04ca7e9c5786fd86.png)