git merge —— 牢记设置冲突显示格式为diff3

之前的博客 git merge —— 为什么比 diff + patch 好 大讲了git merge的优越性,主要因为它用到了先进的3-way-merge算法。但是3-way-merge也会产生冲突,手工解决是跑不了了。为了方便正确的解决冲突,最好设置冲突显示格式为diff3:

git config --global merge.conflictstyle diff3

这样在merge产生冲突的时候,冲突文件将包含更多的信息(即冲突部分在基准点的内容)。看下面的例子:

基准版本:

top
this line will be deleted
bottom

分支b1的版本(增加了两行"add new line","add new line2"):

top
this line will be deleted
add new line
add new line2
bottom

HEAD版本(删除了一行"this line will be deleted",增加一行"add new line2"):

top
add new line2
bottom

不使用diff3 style的冲突文件:

top
<<<<<<< HEAD
add new line2
=======
this line will be deleted
add new line
add new line2
>>>>>>> b1
bottom

这里的top和bottom两行是没有冲突的部分,中间是冲突的部分,其中:
(1) <<<<<<< HEAD 与 ======= 之间,是冲突部分在 HEAD 的内容
(2) ======= 与 >>>>>>> b1 之间,是冲突部分在 b1 分支的内容

通过以上信息你能知道这个冲突该怎么解决么?

估计很多人看见HEAD是b1分支的子集,会不假思索地保留b1分支内容,不是么?

top  
this line will be deleted
add new line
add new line2
bottom

很遗憾,HEAD上曾经删除过“this line will be deleted”这一行,解决完冲突后,它又跑回来了

使用diff3 style的冲突文件:

top
<<<<<<< HEAD
add new line2
||||||| merged common ancestors
this line will be deleted
=======
this line will be deleted
add new line
add new line2
>>>>>>> b1
bottom

同样,这里的top和bottom两行是没有冲突的部分,中间是冲突的部分,其中:
(1) <<<<<<< HEAD 与 ||||||| merged common ancestors 之间,是冲突部分在 HEAD 的内容
(2) ||||||| merged common ancestors 与 ======= 之间,是冲突部分在基准点的内容
(3) ======= 与 >>>>>>> b1 之间,是冲突部分在 b1 分支的内容

这一次多了一个基准点信息,就可以明确地看到,基准点有的这一行“this line will be deleted”,在HEAD中被删除了。所以很容易做出正确的冲突处理:

top
add new line
add new line2
bottom

另外git pull和git rebase也有合并操作,所以也会受影响。

再一次,请记住一定要使用diff3 style:

git config --global merge.conflictstyle diff3

转载于:https://my.oschina.net/jiangyouxin/blog/109491

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
git merge 冲突是指在执行git merge命令时,发现两个分支之间存在冲突的情况。冲突的原因可能是两个分支在同一处修改了相同的文件或者代码段,导致无法自动合并。在这种情况下,Git需要手动解决冲突。 解决git merge冲突的方法有多种,以下是两种常见的解决方案: 1. 手动解决冲突:在执行git merge后,如果出现冲突Git会将冲突的文件标记出来。你可以使用文本编辑器打开这些文件,并查看冲突的地方。冲突的部分会被包含在一对特殊标记(如<<<<<<< HEAD、=======和>>>>>>>)之间。你需要根据需要,手动修改这些部分,将冲突解决掉。然后保存文件,再执行git add和git commit命令完成解决冲突的过程。 2. 使用git pull命令解决冲突:你可以使用一条简单的命令来解决冲突。首先,执行以下两条命令: git config pull.ff false git pull 这两条命令的作用是禁用fast-forward合并,并拉取最新的代码。如果在此过程中出现冲突Git会自动将冲突的文件标记出来。然后你可以编辑这些文件,解决冲突,并执行git add和git commit命令来完成解决冲突的过程。 需要注意的是,git merge命令在两个分支合并时可能会出现冲突。而git pull命令实际上是git fetch和git merge命令的组合,用于将另一个代码仓库中的变化合并到当前分支中。因此,在使用git pull命令时,也可能会遇到冲突的情况。 总结起来,解决git merge冲突的方法可以是手动解决冲突,也可以使用git pull命令解决冲突。具体的解决方法取决于个人偏好和具体情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Git merge 出现冲突的根源,如何解决各种类型的冲突](https://blog.csdn.net/weixin_44757863/article/details/121618060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值