1.前言

学习使用 Git 也有一段时间,但一直都是把 Git 当作一个代码仓库,使用的命令无非就是 clone, add, commit ,往往课程作业也没有过多人合作开发,没有体验过 Git 的分支操作。

但在实习时,我了解到在实际的团队开发中,一个新的功能往往都是在分支中进行开发,最终将开发好的代码合并到 master 中。

合并(merging)是在形式上整合别的分支到你当前的工作分支的操作。Git 所带来的最伟大的改善就是它让合并操作变得非常轻松简单。在大多数情况下,Git 会自己弄清楚该如何整合这些新来的变化。

当然,也存在极少数的情况,你必须自己手动地告诉 Git 该怎么做。最为常见的就是大家都改动了同一个文件。即便在这种情况下,Git 还是有可能自动地发现并解决掉这些冲突。但是,如果两个人同时更改了同一个文件的同一行代码,或者一个人改动了那些被另一个人删除了的代码,Git 就不能简单地确定到底谁的改动才是正确的。这时 Git 会把这些地方标记为一个冲突,你必须首先解决掉这些冲突,然后再继续你的工作。

2.出现冲突

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

this is a readme file.

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

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

修改 readme 文件如下:

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

之后提交修改

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

切换到 master 分支

$ 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 文件如下:

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

提交修改

$ 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"

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

Git 笔记——如何处理分支合并冲突的更多相关文章

  1. Git分支合并冲突解决(续)

    接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...

  2. git入门五(分支合并冲突和衍合)

    分支合并冲突的处理   合并分支的冲突时在不同的分支中修改了同一个文件的同一部分,程序无法把两份有差异的文件合并,这时候需要人为的干预解决冲突.当前处于master 分支,当dev 分支和master ...

  3. Git分支合并冲突解决

    前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...

  4. git 分支合并冲突

    准备新的feature1分支,继续我们的新分支开发 [root@node1 git]# git checkout -b feature1 D git/LICENSE.txt Switched to a ...

  5. git分支合并冲突

    合并冲突 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们. 如果你对 #53 问题的修改和有关 hotfix 的修改都涉及到同一个文件的同一处,在合并 ...

  6. git 强制覆盖,分支合并

    强制合并 git fetch --all && git reset --hard origin/master && git pull 合并代码 git commit - ...

  7. eclipse中解决git分支合并冲突

    冲突场景: 在master分支上有文件student.py. 在master上增新一个dev分支 在dev分支上修改文件student.py.增加函数def d():,并commit; 在master ...

  8. eclipse git 创建新分支 合并分支 删除分支

    创建分支: 合并分支: 删除分支:

  9. git如何将一个分支合并到另一个分支?

    答: git merge --no-edit <another branch>

随机推荐

  1. css3自定义滚动条背景透明

    .editor{ overflow:hidden; height:640px; padding:0 45px; border: 0 none; outline: none; } .editor::-w ...

  2. splay专题复习——bzoj 3224 & 1862 & 1503 题解

    [前言]快要省选二试了.上次去被虐出翔了~~这次即便是打酱油.也要打出风採! 于是暂停新东西的学习,然后開始复习曾经的知识.为骗分做准备.PS:区间翻转的临时跳过,就算学了也来不及巩固了. [BZOJ ...

  3. Spark项目之电商用户行为分析大数据平台之(十一)JSON及FASTJSON

    一.概述 JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格式, ...

  4. istio1.0.2配置

    项目的组件相对比较复杂,原有的一些选项是靠 ConfigMap 以及 istioctl 分别调整的,现在通过重新设计的Helm Chart,安装选项用values.yml或者 helm 命令行的方式来 ...

  5. MyBatis之Collection

    Collection翻译过来,意为"集合"的意思,既然是集合,肯定是代表多个. MyBatis以其自身,小巧易懂,闻名于JavaEE. 传统的JDBC就不说了,Hibernate记 ...

  6. Pyspider抓取静态页面

    近期,我想爬一批新闻资讯的内容.新闻类型的网址很多,我想看看有没有一个网页上能包罗尽可能多的新闻网站呢,于是就发现了下面这个网页 http://news.hao123.com/wangzhi 这个页面 ...

  7. [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口

    原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题

  8. Leetcode——64. 最小路径和

    题目描述:题目链接 同样对于这个问题,我们可以考虑用动态规划来解决. 解决动态规划常见的三个步骤: 1:问题的归纳.对于 i,j 位置上的最短路径可以用d[ i ][ j ]表示. 2:归纳递推式:d ...

  9. Android自定义布局的背景在多分辨率的情况下设置fill_parent时背景不能够横向全屏的问题解决

    问题描述:最近做了一个自定义的控件LinearLayout就是公用的底部菜单条,在指定分辨率下(例如:480x800,480x854)下背景是正常的,但是当程序运行到非指定(默认)的分辨率下就不正常了 ...

  10. P2014 选课

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...