前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具系列 | Git 合并时 --no-ff 的作用

工具系列 | Git 合并时 --no-ff 的作用

作者头像
Tinywan
发布2023-03-08 18:20:07
8410
发布2023-03-08 18:20:07
举报
文章被收录于专栏:开源技术小栈开源技术小栈

Git 合并时 --no-ff 的作用

在许多介绍 Git 工作流的文章里,都会推荐在合并分支时,加上 --no-ff 参数:

代码语言:javascript
复制
$ git checkout develop
$ git merge --no-ff feature

--no-ff 在这的作用是禁止快进式合并。

Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward),比如下图:

代码语言:javascript
复制
          A---B---C feature
         /
D---E---F master

要把 feature 合并到 master 中,执行以下命令

代码语言:javascript
复制
$ git checkout master
$ git merge feature

结果就会变成

代码语言:javascript
复制
          A---B---C feature
         /         master
D---E---F 

因为 feature 就在 master 的下游,所以直接移动了 master 的指针,master 和 feature 都指向了 C。而如果执行了 git merge --no-ff feature 的话,是下面的结果:

代码语言:javascript
复制
          A---B---C feature
         /         \
D---E---F-----------G master

由于 --no-ff 禁止了快进,所以会生成一个新的提交,master 指向 G。

从合并后的代码来看,结果其实是一样的,区别就在于 --no-ff 会让 Git 生成一个新的提交对象。为什么要这样?通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。

所以如果你根本不在意提交历史,也不爱管 master 干不干净,那么 --no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了 B,而不是想要的 F,因为 feature 的历史合并进了 master 里。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git 合并时 --no-ff 的作用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档