git merge 合并时 --no-ff 的作用——主要影响版本回退(好文章!)
在许多介绍 Git 工作流的文章里,都会推荐在合并分支时,加上 --no-ff
参数:
$ git checkout develop$ git merge --no-ff feature
--no-ff
在这的作用是禁止快进式合并。我们平常什么都不加的时候,则使用默认的 --ff
, 即 fast-forward 方式
Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward),比如下图:
A---B---C feature/D---E---F master
要把 feature 合并到 master 中,执行以下命令
$ git checkout master$ git merge feature
结果就会变成
A---B---C feature/ masterD---E---F
因为 feature 就在 master 的下游,所以直接移动了 master 的指针,master 和 feature 都指向了 C。而如果执行了 git merge --no-ff feature
的话,是下面的结果:
A---B---C feature/ \D---E---F-----------G master
由于 --no-ff
禁止了快进,所以会生成一个新的提交,master 指向 G。
从合并后的代码来看,结果其实是一样的,区别就在于 --no-ff
会让 Git 生成一个新的提交对象。为什么要这样?通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。所以如果你根本不在意提交历史,也不爱管 master 干不干净,那么 --no-ff
其实没什么用。
不过如果不加--no-ff的话
,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了 B,而不是想要的 F,因为 feature 的历史合并进了 master 里。
【一句话】
影响回退:
把dev分支使用普通默认merge的方式到master中后,提交历史信息合并到一起,导致回退时,可能回退到的不是自己想要的那个版本(回退到了分支中的某个版本);
加上--no-ff则不会,各个分支的提交历史信息不会合并到一起(会回退到master的上个版本)。
另,附上一个图便于理解:
图片来自:https://www.cnblogs.com/damoblog/p/13144379.html
转载自:https://blog.csdn.net/zombres/article/details/82179122
git merge 合并时 --no-ff 的作用——主要影响版本回退(好文章!)相关推荐
- git merge合并时遇上refusing to merge unrelated histories的解决方案
如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上--allow-unrelated-hi ...
- git merge(git pull)合并时遇上refusing to merge unrelated histories的解决方案
如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上–allow-unrelated-his ...
- 【git】git merge 合并分支时遇上refusing to merge unrelated histories的解决方案
今天在合并分支提示"refusing to merge unrelated histories"的错误: 原因:由于两个分支拥有不相关的提交历史,所以是拒绝合并的,如果确实需要合并 ...
- git merge 合并分支时遇上refusing to merge unrelated histories的解决方案
文章目录 前言 方法一.合并分支时允许合并不相关的历史 方法二.使用 git reset --hard 命令将feature分支覆盖到master分支 前言 最近一个从其他地方迁入公司自己git服务的 ...
- git merge合并原则
git merge命令作用是将某个分支的内容合并到另一个分支,在合并时有可能会发生冲突,这个时候需要手动解决冲突之后进行提交,才能完成合并 本文主要讲合并原则,以及什么时候会发生冲突 场景描述 假设现 ...
- 解决冲突后,git merge --continue 时 lint不通过
一.背景 合并后,解决冲突,然后想继续合并 git merge --continue 报错: ¯_(ツ)_/¯.... 二.解决 尝试: git merge --continue --no-verif ...
- git merge合并分支解决冲突
Question: ...
- Git分支合并时显示输入合并备注
提示:Please enter a commit message to explain why this merge is necessary 解决方法: 按 i 进入insert模式 填入合并备注( ...
- git merge合并分支后冲突conflict
1.现象: Automatic merge failed; fix conflicts and then commit the result. 2.解决方法: 把源码中冲突的部分,删的删,改的改,合并 ...
最新文章
- json转java对象_json转java对象
- JAX-WS Web Service
- java有 号_JAVA揭竿而起总要有名号
- 查询指定范围内数据记录(适用于sqlserver2005以上)
- 推荐系统相关资源汇总
- oracle10g 操作系统,各版本操作系统ORACLE 10g 下载(包括windows和linux)
- Python游戏开发实战:飞机大战(含代码)
- ISO9660文件系统分析
- DCDC电路PCB Layout技巧
- Mac如何破解管理员密码
- 10分钟带你进入Swagger的世界,快来看一看吧
- 法定节假日加班没给三薪是不是犯法的
- springboot Basic Auth 暴露API 访问认证
- 关于FileZilla连接FTP站点上传下载文件
- (E4)ENVI-met运行结果处理
- codeup墓地目录(算法笔记习题刷题笔记)
- jlink烧写linux内核,如何利用JLINK烧写U-boot到NAND Flash中
- 快速搭建APP的服务器
- 2. 编写程序,求 x+xx+xxx+……(例如:8+88+888+……)前 n 项之和。x 和 n 的值由 用户从键盘输入。
- c#接口是什么,为什么要用接口
热门文章
- Ubuntu解决搜狗输入法乱码
- Linux命令之nc命令
- Quartz学习之Cron表达式详解
- 403 Forbidden You don‘t have permission to access this resource. Apache Server at IP Port 80的解决方法
- android 讯飞语音引擎3.0默认粤语播报
- linux 查看tdagent进程,Fluentd (td-agent) 日志收集系統
- python面试题整活:另类复制粘贴
- [附源码]Java计算机毕业设计SSM房屋中介管理信息系统
- 来自京东、宅急送对微服务编排、API网关、持续集成的实践分享(下)
- Lua下的ECS框架