10 分支管理——解决冲突

有两种可能冲突:

1、不同分支合并时,两个分支修改了同一个文件

2、同一个分支,两个不同的人修改了同一个文件

分支合并时冲突解决

假设我们有两个分支,master和feature1,我们分别修改了这两个分支的同一个文件,如readme.txt。

现在,master分支和feature1分支各自都分别有新的提交,变成了这样:

git-br-feature1

这种情况下,Git无法执行“快速合并”(快速合并只修改指针,如果master比feature1要新的话,master指针就不变,如果feature1从master分出来,然后feature1再做了修改,即feature1比master要新,则直接修改master的指针,让其指向feature1),因为master和feature1都有各自修改的内容,只能试图把各自的修改合并起来,如果各自修改的文件不同,则可以顺利合并成一个新的节点,然后master指向该新节点,feature1指向不变,如果修改了同一个文件,就会有冲突,我们试试看,把feature1分支合并到master分支:

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

果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件.

$ git status
On branch master
Your branch is up to date with 'origin/master'.

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .classpath
        .project
        .settings/

no changes added to commit (use "git add" and/or "git commit -a")

我们打开readme.txt文件,可以看到

<<<<<<< HEAD
master修改的内容
=======
feature1修改的内容
>>>>>>> feature1

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们把冲突解决后,再次把该文件提交到master分支:

$ git add README.md
$ git commit -m 解决分支合并冲突
$ git push origin master

现在,master分支和feature1分支变成了下图所示:

git-br-conflict-merged

用带参数的git log也可以看到分支的合并情况。

假如我们还想进一步把master分支合并到feature1分支,可以直接执行下面命令即可,不会再有冲突了,因为master的内容包含了feature1,并且比feature1的要新,执行合并之后,feature1只需把指针指向master即可:

git checkout feature1
git merge master
git push origin dev

同一个分支冲突解决

假如别人修改了dev分支上的readme.txt文件,自己也修改了该分支的readme.txt文件,在add、commit、push命令时提示需要先更新,执行git pull origin dev命令时,提示有冲突,此时本地打开readme.txt文件,看到标记出冲突的内容,和前面说的一样,本地手动把冲突的内容合并,然后再一次执行add、commit、push命令即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值