git merge --no-ff参数详解

git 在合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么在合并两者时,git 只会简单地把指针右移,这种操作就是“快进”(fast-forward)

一、我们先来看看fast forword和no fast forward(- -no-ff)在git tree上面的区别
  • 先在master分支做一次初始提交76b7dbe wrote a readme file

  • 在master这次提交的基础上创建branchA,并做两次提交06fc66d add branchA-1.txt, fd1640c add branchA-2.txt

  • 在master这次提交的基础上创建branchB,并做两次提交1843b9d add branchB-1.txt, 815a345 add branchB-2.txt

    切回master分支

  • fast forword
    输入如下命令:

    git merge -m 'merge branchA with fast' branchA
    

    可以看到,Fast-forward会忽略-m参数,在git tree上也无法看到merge的信息
    Fast-forward会忽略-m参数

    你可以把下图最左侧*理解为mater分支上的提交点(区别于提交记录),发现master上面有3个提交点
    merge branchA with fast
    fast forward形成如下git tree

    		          06fc66d---fd1640c branchA
    		         /         			master
    		76b7dbe
    

    现在,我们使用git reset --hard HEAD^命令把master分支回退一个版本试一下,回退版本后发现回到了branchA 06fc66d这次提交(因为是branchA的中间提交,可能只完成了一个需求中的部分功能,不能保证这次提交的是稳定的代码,这样就给mater版本稳定性带来风险)
    回退版本后回到了06fc66d这次提交

  • no fast forward(- -no-ff)
    输入如下命令:

    git merge --no-ff -m 'merge branchA with no-fast' branchA
    

    发现master上面只有2个提交点(最左侧*),并且在第二个提交点上可以看到merge的信息(merge branchA with no-fast
    merge branchA with no-fast
    no fast forward形成如下git tree

      				06fc66d---fd1640c           branchA
    		      /                   \
    	  76b7dbe --------------------- 295a439 master
    

    现在,我们再使用git reset --hard HEAD^命令把master分支回退一个版本试一下,回退版本后发现直接回到了merge前master 76b7dbe的这次提交(这样就保证了master分支的相对稳定)

二、总结一下
  • 使用fast forword,master分支上会显示两次提交记录06fc66d,fd1640c。使用no fast forword, master分支上只会显示295a439一次提交记录。no fast forword时master分支提交点更少(如需master上提交记录减少,也就是git commit记录减少,可使用–squash参数)。
  • 使用git reset --hard HEAD^回退上一个版本时,fast forword可以回退到branchA分支的某次提交点,而no fast forword只能回退到master分支merge之前的提交点。
三、是不是很简单,觉得自己已经掌握了no fast forward了?

看一下下面这个例子:
我先使用–no-ff no fast forward方式merge branchA,然后使用–no-ff也就是fast forward方式merge branchB可以吗?我们来试一下
输入如下命令:

git merge --no-ff -m 'merge branchA with no-fast' branchA
git merge -m 'merge branchB with fast?' branchB

你会发现第二次并没有走Fast-Forward
你会发现第二次并没有走Fast-Forward,这是为什么?开头解释了什么情况下会走Fast-Forward

如果顺着一个分支走下去可以到达另一个分支的话

我们看看git tree
git tree
相信你应该知道如何让branchB走Fast-Forward模式了吧?
让branchB走Fast-Forward模式

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值