[廖雪峰] Git 分支管理(3):分支管理策略
通常,合并分支时,如果可能,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分支上合并就可以了。
说白了就是 master 是正式版,dev 是测试版。测试版在测试后确认无误才能和正式版合并,如果一开始就在正式版上开发或者修改,那如果改的过程刚好有人要使用正式版,那么就没办法保证正式版的安全稳定了。
所以,团队合作的分支看起来就像这样:

小结
Git 分支十分强大,在团队开发中应该充分应用。
合并分支时,加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而 fast forward 合并就看不出来曾经做过合并。
【网友 留言】
留言1:实际开发流程是不是这样子的呢?
- leader 在远程仓库创建 2 个分支:master 和 dev
- 张三和李四克隆远程仓库到本地
- 张三和李四都切换到 dev 分支
- 张三创建分支 z3,李四创建分支 l4
- 张三合并 z3 到 dev,李四合并 l4 到 dev
- 张三和李四 push dev 到远程库(此处会冲突吗)
- 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 解决, 依次类推。
延伸阅读:
摘自:
http://www.liaoxuefeng.com/wiki/0013739516305929606
[廖雪峰] Git 分支管理(3):分支管理策略的更多相关文章
- 廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结
廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结 本教程主要是个人的 Git 学习总结. 主要参考博客: 廖雪峰 Git 教程 Git-Cheat-Sheet 文章目录 廖雪峰 Gi ...
- 廖雪峰Git入门教程
廖雪峰Git入门教程 2018-05-24 23:05:11 0 0 0 https://www.liaoxuefeng.com/wiki/00137395163059296 ...
- [廖雪峰] Git 分支管理(2):Bug 分支
软件开发中,bug 就像家常便饭一样.有了 bug 就需要修复,在 Git 中,由于分支是如此的强大,所以,每个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你 ...
- [廖雪峰] Git 分支管理(1):创建与合并分支(HEAD、master、dev、指针)
每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在 Git 里,这个分支叫主分支,即 master 分支.HEAD 严格来说不是指向提交,而是指向 mas ...
- Git-第五篇廖雪峰Git教程学习笔记(4)分支
1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...
- git学习笔记——廖雪峰git教程
OK,先附上教程--廖雪峰的官方网站 友情连接:git官网 简介 这里我只想引用他的原文: Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的.实际情况是这样的: L ...
- 《廖雪峰 . Git 教程》学习总结
基本上,Git就是以下面的命令顺序学习的.文中笔记是从廖雪峰老师的 Git教程 中总结出来的,方面查阅命令. 1.基础 git config --global user.name "Your ...
- 廖雪峰 Git教程学习笔记 原文 http://www.liaoxuefeng.com/
一 .集中式与分布式 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推 ...
- 廖雪峰git教程学习笔记2
本地git仓库和github仓库之间的传输是通过SSH加密的,所以: 注册GitHub账号 创建SSH key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id ...
随机推荐
- Python实现 -- 冒泡排序、选择排序、插入排序
冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 冒泡排序的原理: 比较两个相邻的元素,如果第一个比第二个大,就交换他们 对每一对相邻的元素做同样的工作,从开始第 ...
- 002_更新Nginx证书
全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL 1.自行颁发不受浏览器信任的SSL证书: HTTPS的SSL证书可以自行颁发,Linux下的颁发步骤如下: openssl g ...
- LeetCode(17):电话号码的字母组合
Medium! 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23& ...
- C++ code:动态内存
C++给我们提供了动态内存分配的new和delete操作.一般而论,new和delete操作多用在内存需求捉摸不定的场合.然而,需要处理的数据,如果变动范围很小,我们可以用STL中通用型的容器来做,大 ...
- MySQL问题解决:-bash:mysql:command not found
问题: [root@linux115 /]# mysql -uroot -p -bash: mysql: command not found www.2cto ...
- Java编程的逻辑 (4) - 整数的二进制表示与位运算
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Java编程的逻辑 (71) - 显式锁
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- 富文本编辑器&FileReader
最近在做一个web版的管理Tool,其中包括一个编辑框,要求能够编辑文字,插入图片,最后导出做成一个Html.对于资深人士看来,这很容易啊,不就是一个富文本编辑框吗?这其实就是一个概念的问题,对有经验 ...
- 【AtCoder】ARC101题解
C - Candles 题解 点燃的一定是连续的一段,枚举左端点即可 代码 #include <bits/stdc++.h> #define enter putchar('\n') #de ...
- SpringBoot详细研究-03系统集成
据说杰克船长被黑客盗片了,看来信息安全依然任重而道远,本文以此为引子,来介绍下spring boot对于系统集成方面的支持. Spring Security提供一套安全框架,通过IOC和AOP来实现安 ...