Git 笔记——如何处理分支合并冲突

1.前言

学习使用 Git 也有一段时间,但一直都是把 Git 看成一个代码仓库,使用的命令无非就是 clone, add, commit ,每每课程做业也没有过多人合做开发,没有体验过 Git 的分支操做。
但在实习时,我了解到在实际的团队开发中,一个新的功能每每都是在分支中进行开发,最终将开发好的代码合并到 master 中。
合并(merging)是在形式上整合别的分支到你当前的工做分支的操做。Git 所带来的最伟大的改善就是它让合并操做变得很是轻松简单。在大多数状况下,Git 会本身弄清楚该如何整合这些新来的变化。
固然,也存在极少数的状况,你必须本身手动地告诉 Git 该怎么作。最为常见的就是你们都改动了同一个文件。即使在这种状况下,Git 仍是有可能自动地发现并解决掉这些冲突。可是,若是两我的同时更改了同一个文件的同一行代码,或者一我的改动了那些被另外一我的删除了的代码,Git 就不能简单地肯定到底谁的改动才是正确的。这时 Git 会把这些地方标记为一个冲突,你必须首先解决掉这些冲突,而后再继续你的工做。git

2.出现冲突

首先在主分支 master 上,又一个 readme 文件,内容以下:学习

this is a readme file.

接着新建一个分支,而且修改这个 readme 文件。this

# 新建分支并转到这个分支
$ git checkout -b bran1
Switched to a new branch 'bran1'

修改 readme 文件以下:code

bran1: head
this is a readme file.
bran1: foot

以后提交修改开发

$ git add readme
$ git commit -m "在bran1分支下修改"

切换到 master 分支it

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

在 master 分支上到 readme 文件,处于上一次修改以前,若是这时候将两个分支合并,是不会出现问题的。可是,若是 master 如今也要修改 readme 文件,就会出现冲突了。
修改 readme 文件以下:ast

master: head
this is a readme file.
master: foot

提交修改file

$ git add readme
$ git commit -m "在master分支下修改"

如今 master 分支与 bran1 分支都比文章开始时都 master 分支多走了一步。这种状况下,Git没法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。文件

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

3.冲突处理

出现了 Git 没法自动处理的冲突,那为了解决这种冲突,只能手动进行处理,处理方式是在发生冲突的地方进行多选一,只保留一个,那么就能够解决冲突。
此时打开 readme 文件,发现文件内容入下:时间

<<<<<<< HEAD
master: head
=======
bran1: head
>>>>>>> bran1
this is a readme file.
<<<<<<< HEAD
master: foot
=======
bran1: foot
>>>>>>> bran1

这里的 <<<<<<< ,=======,>>>>>>> 标记了冲突出现的位置,咱们能够对冲突对文本进行选择,好比第一个冲突咱们保留 master 下对修改,第二个冲突保留 bran1 下对修改:

master: head
this is a readme file.
bran1: foot

再次提交

$ git add readme
$ git commit -m "conflict fixed"

此时冲突已经解决,提交不会出现问题。

相关文章
相关标签/搜索