[廖雪峰]git分支管理策略

author author     2022-08-25     500

关键词:

通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制 禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。

下面我们实战一下 --no-ff 方式的 git merge

首先,仍然创建并切换 dev 分支:

$ git checkout -b dev
Switched to a new branch ‘dev‘

修改 readme.txt 文件,并提交一个新的 commit:

$ git add readme.txt 
$ git commit -m "add merge"
[dev 6224937] add merge
 1 file changed, 1 insertion(+)

现在,我们切换回 master

$ git checkout master
Switched to branch ‘master‘

准备合并 dev 分支,请注意 --no-ff 参数,表示禁用 Fast forward

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the ‘recursive‘ strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

因为本次合并要创建一个新的 commit,所以加上 -m 参数,把 commit 描述写进去。

合并后,我们用 git log 看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|| * 6224937 add merge
|/
*   59bc1cb conflict fixed
...

可以看到,不使用 Fast forward 模式,merge 后就像这样:

技术分享

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master 分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在 dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如 1.0 版本发布时,再把 dev 分支合并到 master 上,在 master 分支发布 1.0 版本;

你和你的小伙伴们每个人都在 dev 分支上干活,每个人都有自己的分支,时不时地往 dev 分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

技术分享

小结

Git 分支十分强大,在团队开发中应该充分应用。

合并分支时,加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而 fast forward 合并就看不出来曾经做过合并。

 

 


 

【网友提问】

问题1:实际开发流程是不是这样子的呢?

  1. leader 在远程仓库创建 2 个分支:master 和 dev
  2. 张三和李四克隆远程仓库到本地
  3. 张三和李四都切换到 dev 分支
  4. 张三创建分支 z3,李四创建分支 l4
  5. 张三合并 z3 到 dev,李四合并 l4 到 dev
  6. 张三和李四 push dev 到远程库(此处会冲突吗)
  7. leader 把远程库里的 dev 合并到远程库的 master

答1:[廖雪峰] 合并也是在本地合并,把本地的 dev 合并到本地的 master,再把本地的 master 推到远程 master。

答2:Z3 --> dev 时  先 pull origin dev

有冲突时,在自己本地更改。

Z3 提交到 --> dev

dev 下 merge z3

如果这时候

l4 --> dev

但是他并没有先 pull,他提交上去的就会出现冲突 

如果这个时候他也在 dev 下 merge 就会出现冲突。

这时候就需要在 dev 下解决冲突。

如果有冲突的情况下  提交 master 请求时 就会告诉你,解决完冲突才可以提交。

问题2:远程的 master 和 push 上去的 master 进行冲突解决? 

z3 master-->    |
l4 master-->     | ----> 远程 master
w5 master-->   |

各自解决各自的冲突,各个 master 之间的冲突 push 上去谁解决呢?

答1:[勤奋的光光2012] 根据我的理解,假设提交的先后顺序为 Z3 L4 W5, Z3 push 上去有冲突就 Z3 解决, l4 再拿到的就是 Z3 push 后的版本了,所以有冲突是 l4 解决, 依次类推。

 

 

Git 分支管理详解

Git Stash用法,方便临时处理bug时随时切换分支而不丢失修改

[廖雪峰]git分支管理:bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。当你接到一个修复一个代号101的bug的任务... 查看详情

学习廖雪峰的git教程4--继续学习分支管理

查看分支gitbranch-a查看远程分支gitbranch查看本地分支创建分支gitcheckout-bbranch-name在远程创建一个属于自己的分支删除分支gitcheckout-dbranch-name与远程分析相关联gitcheckout-bbranch-nameorigin/branch-name在本地创建一个跟远程对应的分支gitbran... 查看详情

git(代码片段)

廖雪峰Git教程+Git-Cheat-Sheet学习总结本教程主要是个人的Git学习总结。主要参考博客:廖雪峰Git教程Git-Cheat-Sheet文章目录廖雪峰Git教程+Git-Cheat-Sheet学习总结Git教程(廖雪峰)安装Git创建版本库时光机穿梭版本回退工作区和暂存区... 查看详情

廖雪峰git教程笔记与总结--git简介常用命令分支管理(代码片段)

本文主要用于记录阅读Git教程-廖雪峰的官方网站后的一些心得笔记,并且对git一些常用命令做一个整理总结。本文要点分为:1、Git简介;2、Git常用命令;3、Git分支管理。一、Git简介什么是Git?Git是目前世界... 查看详情

学习总结git学习-参考廖雪峰老师教程九-使用码云

学习总结之Git学习-总目录:一、Git简介二、安装Git三、创建版本库四、时光机穿梭五、远程仓库六、分支管理七、标签管理八、使用GitHub九、使用码云十、自定义Git期末总结九、使用码云 查看详情

廖雪峰git教程笔记与总结--git简介常用命令分支管理(代码片段)

本文主要用于记录阅读Git教程-廖雪峰的官方网站后的一些心得笔记,并且对git一些常用命令做一个整理总结。本文要点分为:1、Git简介;2、Git常用命令;3、Git分支管理。一、Git简介什么是Git?Git是目前世界... 查看详情

git学习笔记分支管理

学习廖雪峰老师的Git教程的笔记,以供自己以后复习查看。★★★★★创建、合并、删除分支。   ★创建分支             gitbranchbranchName--------创建分支     查看详情

git笔记5分支管理2

来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fastforward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fastforward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息... 查看详情

廖雪峰git教程学习笔记

...果需要更全的知识请移步廖老师Git教程学习内容来源:廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd183 查看详情

廖雪峰git入门教程

廖雪峰Git入门教程 2018-05-2423:05:11    0    0    0https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 查看详情

廖雪峰git教程学习笔记

廖雪峰git简单教程学习笔记教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001、可以这样设计目录,在d: eposisoty在这个目录下面有很多的仓库。mkdirlearngitcdlearngit>>gitinit   &n 查看详情

git常用命令,参照廖雪峰老师的git教程

...就是边学边记笔记,这里只是本人写的自己通过学习了廖雪峰老师的git教程之后自己做的笔记,个人理解,可能有失偏颇,如想学习更专业更权威的git知识,请移步廖雪峰老师的官网一.创建git仓库  1.gitinit 在本地创建一... 查看详情

git标签管理

来源:廖雪峰为什么要标签:  发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以... 查看详情

git教程

  该笔记事笔者学习廖雪峰Git教程的笔记,如果想详细了解Git请移步廖雪峰官网。  廖雪峰官网地址: https://www.liaoxuefeng.com/  廖雪峰Git教程: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67 查看详情

廖雪峰git教程学习笔记

教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000创建版本库初始化一个Git仓库,使用gitinit命令。添加文件到Git仓库,分两步:第一步,使用命令gitadd<file>,注意,可反复多次使用,添加多个文件;... 查看详情

廖雪峰的git学习笔记

 安装完后,每个机器都要自报家门Config--配置     global--全局参数 配置全局用户名$gitconfig--globaluser.name“YourName”配置邮箱地址$gitconfig--globaluser.email“[email protected]”  创建版本库&n 查看详情

《廖雪峰git教程》学习笔记

原文链接一.创建版本库①初始化一个Git仓库:gitinit②添加文件到Git仓库:1.gitadd<file>; 2.gitcommit 二.时光机穿梭①查看工作区状态,文件是否被修改过:gitstatus②查看修改的内容:gitdiff1.版本回退①HEAD:当前版本②HEAD^... 查看详情

github-分支管理03-多人合作重点(代码片段)

 参考博文:廖雪峰Git教程 1.多人协作      当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。      要... 查看详情