备注:

本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

知识点

  • git log --graph --pretty=oneline --abbrev-commit查看分支合并情况

  • git log --graph查看分支合并图

  • 当两个分支修改同一个文件时,可能发生两个分支不能自动合并的问题,需要手动解决冲突(合并时,Git将冲突标识了出来),然后再次提交,即可完成合并。

  • 使用参数--no-ff禁用快合并模式,git merge --no-ff -m"merge with no-ff" dev,合并

关于分支中的冲突

如下,新建一个分支dev2,并且在新分支上开发:

$ git checkout -b dev2
切换到一个新分支 'dev2'

修改readme.txt,添加一行。

Creating a new branch is quick AND simple.
  • 在dev2分支进行提交,
$ git add readme.txt
$ git commit -m"add new line at readme on dev2"
[dev2 4a097db] add new line at readme on dev2
1 file changed, 1 insertion(+)
  • 切换到master分支,同时在master上修改readme文件(添加域dev2分支上文件不同的内容,Creating a new branch is quick & simple.),并且提交
git checkout master
切换到分支 'master'
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
$ git add readme.txt
$ git commit -m"add new line at readme on master"
[master d562bf7] add new line at readme on master
1 file changed, 1 insertion(+)

如上,Git会自动提示当前master分支比远程origin/master分支领先一个提交

现在master分支和dev2 分支都有了各自新的提交,在这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,由于同时都修改了同一行内容,此时会有冲突。

$ git merge dev2
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果。

Git提示自动合并存在冲突,冲突文件是readme,需要修正冲突然后提交修正后的结果

如果用git status查看看当前状态

$ git status
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
(解决冲突并运行 "git commit") 未合并的路径:
(使用 "git add <文件>..." 标记解决方案) 双方修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

如上,提示双方修改

  • 查看readme.txt的内容
$ cat readme.txt

`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
create two new branch
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev2
  • Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存
Creating a new branch is quick and simple.
  • 修改冲突后提交
$ git add readme.txt
$ git commit -m"conflict fixed"
[master 8f69de8] conflict fixed

Git提示冲突已经修复,现在masterdev2分支均指向了现在工作区的状态。

  • 使用git log --graph --pretty=oneline --abbrev-commit可以查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file

如上,分支合并和冲突记录

  • 此时可以删除dev2分支
$ git branch -d dev2
已删除分支 dev2(曾为 4a097db)。

冲突解决完成

分支管理的策略

通常,合并分支时Git使用Fast forward模式快速合并。但是快速模式删除分支,会丢失分支信息。

强制禁用Fast forward模式,Git会将merge记录为一个新的提交,同时分支历史会记录分支信息。

  • 切换到dev分支,并修改readme文件,同时提交commit
$ git checkout -b dev
切换到一个新分支 'dev'
$ git add readme.txt
$ git commit -m"a new branch"
[dev 44dffc0] a new branch
1 file changed, 1 insertion(+)
  • 切换到master分支
$ git checkout master
切换到分支 'master'
您的分支领先 'origin/master' 共 4 个提交。
(使用 "git push" 来发布您的本地提交)
  • 使用--no-ff参数合并分支dev到当前master,本次合并要创建一个新的commit,所以加上-m参数描述
$ git merge --no-ff -m"merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
  • 使用git log查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
* 7c4d427 merge with no-ff
|\
| * 44dffc0 a new branch
|/
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file

分支策略

实际开发中,分支管理应按照以下几点:

  1. master分支是稳定分支,用来发布最新稳定版本,开发中不需要修改它

  2. 开发中尽量在dev中开发,扩展新功能、修复bug等,等到正式版发布时,在将dev分支合并到master上。

  3. 开发人员在dev分支上开发,每个人都有自己的分支,并且往dev分支上合并。

git分支管理的策略和冲突问题的更多相关文章

  1. Git分支管理的策略梳理

    当下最流行的版本管理系统应该是非Git莫属.相比同类软件,Git有很多优点,其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一 ...

  2. git 分支管理策略 与 物理实现 --author by阮一峰 & 小鱼

    -------------------------下面是阮一峰博士的git branch 逻辑结构图示---------------------------------------------- 如果 ...

  3. git分支管理与冲突解决(转载)

    Git 分支管理和冲突解决 原文:http://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称 ...

  4. Git工程开发实践(四)——Git分支管理策略

    A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/ Git工程开发实践( ...

  5. Git 分支管理策略汇总

    原文链接: Git 分支管理策略 最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码? 我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的 ...

  6. 梳理git分支管理策略

    如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件, ...

  7. Git(五):Git分支管理策略

    转:http://www.ruanyifeng.com/blog/2012/07/git.html 如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control ...

  8. [转]Git分支管理策略

    如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件, ...

  9. Git分支管理策略(转)

    作者: 阮一峰 日期: 2012年7月 5日 使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属 ...

随机推荐

  1. sourcetree 安装破解注册方法

    1.下载sourcetree安装包 2.点击安装到下图步骤 3.在网盘中下载accounts.json  文件,( 链接:https://pan.baidu.com/s/1tJd_xCh-B-oOwd ...

  2. fiddler下载安装

    1.官网https://www.telerik.com/fiddler 2.按照要求填写 3.傻瓜式安装 4.安装https证书

  3. 囚徒问题(100 prisoners problem)的python验证

    密码学课上老师介绍了这样一个问题,囚徒问题(100 prisoners problem):一百个囚徒被关在牢房里,典狱长给他们最后一次机会,100人依次进入一个有100个抽屉的牢房,每个抽屉置乱放入1 ...

  4. Docker精华 ,超全文档!

    我们的口号是:再小的帆也能远航,人生不设限!!    学习规划:继续上篇 <Docker入门>https://www.cnblogs.com/dk1024/p/13121389.html  ...

  5. 手摸手带你理解Vue响应式原理

    前言 响应式原理作为 Vue 的核心,使用数据劫持实现数据驱动视图.在面试中是经常考查的知识点,也是面试加分项. 本文将会循序渐进的解析响应式原理的工作流程,主要以下面结构进行: 分析主要成员,了解它 ...

  6. redis基础一

    2.修改redis.conf的配置文件有两个地方 a.将daemonize设置成true支持后台启动 b.将redis的数据库文件保存到 下面的目录 3.启动redis服务器 4.操作redis ,给 ...

  7. 2、struct2的工作流程

    1.首先执行StrutsPrepareAndExecuteFilter,调用StrutsPrepareAndExecuteFilter类的doFilter方法 在该方法中会产生一个ActionMapp ...

  8. Unity常见的三种数据本地持久化方案

    做游戏的时候常常会有数据配置或者存读档的需求,本文整理了常用的几种解决方案,分别是Unity自带的PlayerPrefs类,XML文件和Json文件. 一. PlayerPrefs 这是Unity自带 ...

  9. 手摸手带你理解Vue的Computed原理

    前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ...

  10. C#/VB.NET 在PDF中添加文件包(Portfolio)

    PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...