应该使用哪一个隐藏微观发射?
git merge --squash
和git merge --no-ff --no-commit
之间唯一的区别是拒绝其他父母吗?
答案 0 :(得分:55)
这些选项存在于不同的目的。您的存储库最终会有所不同。
在完成主题分支的开发之后,假设您的存储库是这样的:
--squash
如果你结帐主人,然后结帐git merge --squash topic; git commit -m topic
,你会得到这个:
--no-ff --no-commit
相反,如果你做git merge --no-ff --no-commit; git commit -m topic
,你会得到这个:
如果您真的要隐藏(我的意思是从您的存储库删除)您的微提交,请使用--squash
。因为,正如您在上面的图像中所看到的,如果您不进行压缩,则不会隐藏您的微提交。此外,您通常不会将您的主题分支推向全世界。主题分支是主题成熟。
如果您希望历史记录包含所有微提交,但将其保留在另一个开发线(上图中的绿线)中,请使用--no-ff --no-commit
。但是请记住a)这不是一个分支,并且b)在Git中并不是真正的意思,因为它只是你提交的另一个父。
如果您真的想了解,请参阅Git Branching - What a Branch Is。