74

应该使用哪一个来隐藏微提交?

唯一的区别是git merge --squashgit merge --no-ff --no-commit其他父母的否认吗?

4

1 回答 1

75

差异

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

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

在此处输入图像描述


--squash

如果你 checkout master 然后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 分支 - 什么是分支。

于 2012-08-16T09:25:56.467 回答