2012-03-07 2458 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