关键词:
通常,合并分支时,如果可能,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:实际开发流程是不是这样子的呢?
- 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 解决, 依次类推。
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。 要... 查看详情