区别
不复制粘贴,不讲那么多晦涩难懂的原理。只说实际效果。
我之前一直用–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