2012-03-07 2457 views
48

正如标题所说,我不清楚git merge --squashgit merge --no-commit之间的区别。Git合并--squash和--no-commit之间的区别

据我了解git merge的帮助页面,这两个命令会让我进入更新的工作树,在那里仍然可以编辑,然后做最后的提交(或多个提交)。

有人可以澄清这两个选项的区别吗?我什么时候使用一个而不是另一个?

回答

65
git merge --no-commit 

这就像一个正常的合并,但不会创建一个合并提交。这个提交将是一个合并提交:当你查看历史时,你的提交将显示为正常合并。

git merge --squash 

这会将更改合并到工作树中而不创建合并提交。当您提交合并的更改时,它将看起来像您的分支上新的“正常”提交:没有历史合并提交。这几乎就像你在所有合并的变化中做出了挑战。

+0

因此,合并承诺会显示历史上的情况?因为我可以编辑提交消息,我将如何看到它是一个合并提交? – quaylar 2012-03-07 10:38:46

+2

@quaylar merge-commit并不是一个特殊的提交,只是它有多个父项。你可以通过'git log --parents'来看到父母的提交例子('git log --merges'只显示这样的提交)。 – 2012-03-07 10:57:02

+5

@PhilippWendler所以基本上:有一个合并提交,我总是通过查看历史知道这个提交是合并的结果(分支对此合并的贡献的信息也保留了吗?)。使用--squash无法知道这个提交是合并的结果。我的理解是否正确? – quaylar 2012-03-07 11:39:00