Git:git-merge的--ff和--no-ff

博客

Git用法总结系列收藏于IT老兵驿站

Git:Git-merge的–ff和–no-ff。

前言

Git merge最容易糊涂的地方就是这个--ff参数和--no-ff 参数,通过本文,把这个整理清楚。

其实官网讲的非常清楚,不过可能因为是英文的,所以大家阅读起来会有一些障碍。(PS:其实还是应该逐步逐步提高自己阅读英文文档的能力,想达到一个更高的高度,是需要客服自己本身很多的弱点的)

实例

假设合并前的分支是这样,这个一个非常常见的场景,如果不明白,可以参考另外一篇文章Git Flow工作流:
这里写图片描述
这是一个很常见的用例,功能开发分支是iss53,在开发新功能,master分支是线上分支,出现了问题,开辟了hotfix分支进行修复,修复完成,进行合并,需要把hotfix合并回master

$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)

步骤如下:

  1. 切换回master分支。
  2. 将hotfix分支合并会master分支。
    然后看到了Fast-forward 的字样,这个词组的意思就是快进,播放电影的时候,可以注意一下,快进按钮上面就是这个词组。
    那么实际变成了什么样呢?
    这里写图片描述
    仅仅是master指针指向了这个提交C4。这样是一种比较快的合并方式,轻量级,简单。
    这个时候,我们往往会删掉hotfix分支,因为它的历史作用已经结束,这个时候,我们的iss53这个功能又向前开发,进行了一次提交,到了C5,那么变成了这样:
    这里写图片描述
    然后,我们要把iss53 这个分支合并回master,就变成了这样:
    这里写图片描述
    这个时候生成了一个新的commit号,这种提交就不是fast-forward(这个时候也无法生成fast-forward提交,因为要将两个版本的内容进行合并,只有在没有需要合并内容的时候,会有这个fast-forward 方式的提交)。
    如果我们对第一次合并,使用了--no-ff参数,那么也会产生这样的结果,生成一个新的提交,实际上等于是对C4 进行一次复制,创建一个新的commit,这就是--no-ff的作用。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnebRQrm-1616768484042)(https://i.stack.imgur.com/FMD5h.png)]

参考:https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging,这里讲了原理。
参考:https://git-scm.com/docs/git-merge,这里是参考。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
`git branch --ff-only merge` 不是一个有效的 Git 命令。请注意,`--ff-only` 和 `merge` 是独立的选项和指令。 `git branch --ff-only` 是一个用于检查当前分支是否可以进行快进合并(fast-forward merge)的命令。快进合并是指将一个分支的提交历史直接应用到另一个分支上,而不会创建新的合并提交。如果使用 `git branch --ff-only` 检查当前分支时,结果为成功,则说明当前分支可以进行快进合并。 另一方面,`merge` 是一个用于将一个分支的更改合并到当前分支的命令。可以使用 `git merge <branch>` 来执行合并操作,其中 `<branch>` 是要合并的分支名称。 因此,如果你想将一个分支(例如 "merge" 分支)的更改合并到当前分支,并且只在快进合并可行时才进行合并,可以按照以下步骤操作: 1. 首先,确保你在要合并更改的目标分支上。你可以使用 `git checkout <target_branch>` 命令切换到目标分支。 2. 然后,运行 `git branch --ff-only` 命令来检查是否可以进行快进合并。 3. 如果 `git branch --ff-only` 命令返回成功,即当前分支可以进行快进合并,则运行 `git merge merge` 命令来将 "merge" 分支的更改合并到当前分支。 需要注意的是,合并操作可能会导致合并提交的生成,特别是当两个分支之间存在分叉点时。只有在可以进行快进合并的情况下,才会执行无合并提交的快进合并。否则,将创建一个新的合并提交来合并两个分支的更改。 总结起来,`git branch --ff-only` 是用于检查当前分支是否可以进行快进合并的命令,而 `git merge <branch>` 是用于将一个分支的更改合并到当前分支的命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值