git merge --no-ff 和git merge --squash的区别

文章讨论了在Git中使用–no-ff与–squash选项进行分支合并的区别。–no-ff保留合并历史但删除其他分支的commit,而–squash将所有commit压缩为一个。rebase用于解决push时的冲突,但可能破坏提交信息。推荐在工作中使用–no-ff以保持清晰的合并记录。
摘要由CSDN通过智能技术生成

区别

不复制粘贴,不讲那么多晦涩难懂的原理。只说实际效果。

我之前一直用–squash,但是今天学了一下–no-ff,发现这就是我想要的。
如果不加no-ff,合并分支的时候会把你要合并分支的commit都带过去,工作中不允许这样,所以我一直用–squash,也是百度到的。
sqaush把所有commit压缩到一个commit文件中。然后再commit -s编辑这个commit msg,把commit删掉,重新写commit。再push
但是这样还得手动写commit msg,还是麻烦。

–no-ff就很方便会自动把你要合并分支的commit msg都删掉,同时这个merge是单独的一个commit,还能编辑commit msg(因为merge已经自动生成了commit,所以这时候想再次编辑我一般用commit --amend),然后push。至于具体的原理,网上很多,讲的罗里吧嗦的。我们知道效果就行了。
以后合并分支直接用–no-ff,就行。

git rebase

rebase会破坏分支的提交信息,一般不用。
但是有时候push 有冲突的时候,就必须rebase.

原理就是
当前代码是A,然后有别人的人提交了B,然后我们再提交,比如C就会出问题,因为当前最新的top变了,应该就是很多人搞不懂的HEAD。

A -》 B -》
^
||
C //我们提交,HEAD位置

这意味着我们要插在A和B中间,当然是不行的,我们需要git pull 本地就是rebase了,你pull的是B,push C,相当于HEAD已经在C了,然后要把HEAD rebase 到B!这就能push了。

这个下面链接的图不错
https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1#merge
https://blog.csdn.net/LiZhen314/article/details/106479779

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值