Git 合并冲突

git merge合并分支

git通过git merge操作将指定分支合并到当前分支上,这里的合并指的是将指定分支的修改合并到当前分支上。当git不知道如何合并时就会产生冲突。

# 本地有两个分支:master,beta
# 切换到master分支
git checkout master
# 将beta分支合并到当前分支master上
git merge beta

如果有冲突,在merge操作后会有提示信息:

$ git merge beta
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

手动打开产生冲突的文档(README.md)进行修改,再执行add和commit操作:

git add .
git commit -m "merge beta"

举个例子

$ git checkout master  # 切换到master分支
$ cat README.md        # 该分支下有一个README.md 文档
++++++++++             # 文档里的内容,就是一行“++++++++“
$ git checkout -b beta # 从master上拉出来一个beta分支

这时有两个分支master、beta分支,这两个分支上的内容是完全一样的。

制造一个冲突

分别修改这个分支下的master、beta分支下的README.md 文件,人为制造一个冲突。

  • master
++++++++++
----------
  • beta
++++++++++
**********

分别执行add,commit操作。

合并产生冲突

这时候将beta合并到master的时候就会产生冲突。

$ git checkout master
$ git merge beta
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

再打开README.md 就会发现文件已经被修改,同时保留master分支和beta不一样的地方里git无法自动合并的部分。

++++++++++
<<<<<<< HEAD
----------
=======
**********
>>>>>>> beta

解决冲突

手动将文件里的需要保留的保留,删除的删除,“<<<<<<< HEAD"与”======="之间是当前分支之前的修改,“=======”与“>>>>>>> beta”是beta分支上的修改,根据需要进行保留或者删除。

$ cat README.md # 这里是全部保留
++++++++++
----------
**********
$ git add .
$ git commit -m "merge beta"

再执行add和commit操作完成冲突合并。需求要push的这时再将当前分支push远程。

完成冲突合并。

冲突产生原因

通过git log --graph --decorate --oneline --all命令可以以图的形式展示分支的commit和merge。

*   86b1868 merge beta
|\
| * 1e5848f ***
* | 05597db ---
|/
* 03dc8fd +++

为了方便表述,将每个commit用一个新的名称表示,03dc8fd:C1,05597db:C2,1e5848f:C3,86b1868:C4。

  1. C1在文件里添加了一行“++++”,而C2在master分支下在文件的第二行添加了一行“———”,C3在beta分支下在文件第二行添加了一行“****”。
  2. 合并的时候,因为两个分支在同一个文件下的同一个地方都有修改,git无法替人做觉得哪些需要保留或者删除,这时候会同时保留下来,让人自己去选择如何处理。
  3. 人为处理之后commit形成了C4,完成了分支合并。

参考文献:https://www.progit.cn/#_分支的新建与合并

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值