`--squash`和`--no-ff --no-commit`之间有什么区别?

时间:2012-08-16 08:57:47

标签: git merge git-merge fast-forward squash

应该使用哪一个隐藏微观发射?

git merge --squashgit merge --no-ff --no-commit之间唯一的区别是拒绝其他父母吗?

1 个答案:

答案 0 :(得分:55)

差异

这些选项存在于不同的目的。您的存储库最终会有所不同。

在完成主题分支的开发之后,假设您的存储库是这样的:

enter image description here

--squash

如果你结帐主人,然后结帐git merge --squash topic; git commit -m topic,你会得到这个:

enter image description here

--no-ff --no-commit

相反,如果你做git merge --no-ff --no-commit; git commit -m topic,你会得到这个:

enter image description here

隐藏微提交

如果您真的要隐藏(我的意思是从您的存储库删除)您的微提交,请使用--squash。因为,正如您在上面的图像中所看到的,如果您不进行压缩,则不会隐藏您的微提交。此外,您通常不会将您的主题分支推向全世界。主题分支是主题成熟。

如果您希望历史记录包含所有微提交,但将其保留在另一个开发线(上图中的绿线)中,请使用--no-ff --no-commit。但是请记住a)这不是一个分支,并且b)在Git中并不是真正的意思,因为它只是你提交的另一个父。

如果您真的想了解,请参阅Git Branching - What a Branch Is