解决Git合并分支发生的冲突

612 查看

首先感叹一下,Git在日常项目的管理中真是好用。

进入正题,今天在合并分支的时候发生了冲突,第一次解决冲突,做个记录。
简单起见,假设:

  • 冲突的文件是HelloWorld.java

  • 我的分支是issue

  • 要合并到分支master

冲突提示

Auto-merging HelloWorld.java
CONFLICT (content): Merge conflict in HelloWorld.java
Automatic merge failed; fix conflicts and then commit the result.

发生冲突的原因

在你要合并分支的时候,另一分支上同一份代码已经被修改过。

合并分支的步骤

  1. 更新本分支,当然,如果你确认你本机上的代码是最新的,可以略过这步。

    $ git pull
  2. 切换到master分支。

    $ git checkout master
  3. 提出合并。

    $ git merge master

    在这一步,git将发出冲突提示:

    Auto-merging HelloWorld.java
    CONFLICT (content): Merge conflict in HelloWorld.java
    Automatic merge failed; fix conflicts and then commit the result.

解决办法

  1. 查看冲突。

        $ git status

    这一步会列出具体的冲突文件有哪些。

  2. 根据提示,到相应的文件中查看,会发现文件中有以下错误提示:
    其中,=======上面是当前分支(也就是master)的代码,=======下面是要合并进来的分支的代码,两者发生了冲突。此时,分析两段的代码是实现相同功能而写的重复的代码还是各自实现的不同的功能的代码。如果是重复代码:两个二选一删除一个,然后再把这些冲突标示符删除即可;如果不是重复代码,两个都需要保留,只把冲突符号删除即可。

  3. 重新添加

    $ git add HelloWorld.java

    多说一句,如果在eclipse中修改冲突,可以直接右键文件->Team->Add to Index。

  4. 最后,提交代码。

    $ git commit -m "合并issue分支"
    $ git push origin master
  5. 切换回issue分支

    $ git checkout -

    如果是在eclipse中, 右键工程->Team->Switch To->issue。在eclipse中用git也还是挺方便的。

扩展

最后,解决问题的过程无意间发现这个网站:猴子都能懂的git入门,里面的内容很丰富也很好理解,有兴趣的同学可以去学习一下。