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. Netty 聊天小程序

    这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...

  2. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(二)基础环境安装

    一.安装CentOS 6.5 x64 具体安装过程自行百度 1.1 修改IP地址 [root@master ~]# vi /etc/sysconfig/network DEVICE=eth0 TYPE ...

  3. day4-课堂笔记

    变量 成员变量-构造方法里定义 self.xxx 使用:类内部: self.xxx 类外部: 先创建实例 实例.xxx 类变量 类定义下面直接定义 使用:类方法内 cls.xxx 类名.xxx sel ...

  4. eclipse导出可执行jar包步骤

    按步骤图文说明 第一步:选择要导出的工程,右键[export] 第二步:双击Java文件夹下的[Runnable Jar File] 第三步:该步骤分4步走 3.1 从下拉框选择该jar的入口文件,即 ...

  5. WorldWind源码剖析系列:表面瓦片类SurfaceTile

    表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...

  6. Python2.7-bz2

    bz2模块,提供 bz2 压缩的接口,一般使用 BZ2File 类来完成操作,操作的文件是后缀为“.bz2”的文件 1.模块方法 bz2.compress(data[, compresslevel]) ...

  7. Elasticsearch学习笔记2

    Elasticsearch is a search engine based on Lucene library.  It provides a distributed, multitenant-ca ...

  8. Java设置以及获取JavaBean私有属性进阶

    在上一篇博客中讲到使用Java提供的原生API设置以及获取一个JavaBean的私有属性. 但是使用Java的原生API过于复杂,有没有更加简单的方法呢?答案是肯定的.下面介绍一个开元工具包来非常方便 ...

  9. DQN(Deep Reiforcement Learning) 发展历程(五)

    目录 值函数的近似 DQN Nature DQN DDQN Prioritized Replay DQN Dueling DQN 参考 DQN发展历程(一) DQN发展历程(二) DQN发展历程(三) ...

  10. day57

    JQ初级 一.认识jQuery 1.什么是jQuery jQuery是对原生JavaScript二次封装的工具函数集合 jQuery是一个简洁高效的且功能丰富的JavaScript工具库 2.jQue ...