Git使用之——冲突解决一(git merge conflict)

Git冲突是在多用户协同工作下出现,在一些情况下Git可以智能自动合并,但有时需要用户手动合并。

(本文链接:http://blog.csdn.net/u012150179/article/details/14047183

一. Git智能自动合并


1. 多成员修改不同文件

这和之前所述的“非快进式推送”一致,按照其方式解决( http://blog.csdn.net/u012150179/article/details/36044515)。

2. 多成员修改相同文件不同区域

3. 同时修改文件名和文件内容


解决:

上述三种方式都可以用同一中方式解决,也就是在执行push之前先进行pull操作,即
git pull

这里

git pull = git fetch + git merge refs/remotes/origin/master

二. 用户手动合并


1. 文件合并(修改同一文件的同一区域)

现在模拟这种情况的发生。(注:我这里是首先搭建了一个Git 服务器,搭建方法可见 http://blog.csdn.net/u012150179/article/details/17029731)这里新建了从share版本库clone内容的两个用户user1和user2。并同时修改文件conflict_test文件的第二行,在user1执行push后,user2执行push会发生如下情形:
图1
在log信息中提示使用git pull,那尝试git pull,出现一下结果:
图2
得到的信息是:“自动merge失败,需要修复conflict后才能commit。”也就是此时已经出现了在上面“Git智能自动合并”的情形之外的情况,现在Git已经不能执行自动合并,此时需要用户手动合并解决问题。
可以查看版本库状态:
图3

问题解决方法:

这里比较好的方式是借助mergetool,输入
git mergetool
得到
图4,回车
出现kdiff3图形界面,其中A区为修改前,B区为本地(local)版本库修改,C区为远程版本库(remote)信息,在最下方点击右键选择需要使用的版本库,修改后保存退出即可。
这里就完成了conflict的手动合并。
之后:
git commit –m “”
git push origin master
即可。查看提交日志:
图5

可以发现最新提交是前两次提交的合并。

2. 树合并(不同成员对同一文件重命名)

关于树冲突,出现的原因是因为同时对一个文件进行了重命名。也可以使用mergetool修复冲突,但是更直接的方法是直接使用git rm删除想删除的文件,使用git add将需要的文件加到暂存区进而commit。

在文件合并和树合并中还有一个很有用的命令是:
git ls-files –s
可查看暂存区文件。


其它具有参考性文章:

http://yodalee.blogspot.com/2013/03/vimdiffgit-merge-conflict_28.html

http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html



  • 16
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值