`–squash`和`–no-ff –no-commit`有什么区别?
哪一个应该用来隐藏微提交?
是git merge --squash
和git merge --no-ff --no-commit
的唯一区别git merge --no-ff --no-commit
否认其他父母?
差异
这些选项存在于不同的目的。 您的存储库结束了不同。
假设在主题分支上完成开发之后,您的存储库就是这样的:
--squash
如果你签出master,然后git merge --squash topic; git commit -m topic
git merge --squash topic; git commit -m topic
,你得到这个:
--no-ff --no-commit
相反,如果你做git merge --no-ff --no-commit; git commit -m topic
git merge --no-ff --no-commit; git commit -m topic
,你得到这个:
隐藏微提交
如果你真的想隐藏(我的意思是从你的仓库中删除 )你的微提交,使用--squash
。 因为,正如你在上面的图片中看到的,如果你不挤压你的话,你并不是真的隐藏你的微型提交。 而且,你通常不会把你的主题分支推向世界。 主题分支是主题变得成熟。
如果你希望你的历史能够拥有所有的微型提交,但是把它们放在另一个开发线(上图中的绿线),可以使用--no-ff --no-commit
。 但请记住,a)这不是一个分支,b)在Git中并不意味着什么,因为它只是提交的另一个父项。
如果你真的想理解,请参阅Git分支 – 分支是什么 。