2011-03-02 145 views
22

我很好奇這種行爲,也許它只是因爲我主要來自使用SVN和集市。 (我正在學習的git憑藉着出色的GitHub的接口。)默認情況下,爲什麼git會在合併後提交?

似乎直覺上我,彷彿這將是

git merge [branch] --no-commit

更好的爲默認,鼓勵人們作出確保合併在提交之前按照他們希望的方式進行。

+2

順便說一句,如果出現問題,git合併將最終與衝突。此外,如果由於特定的原因,你想看到合併uncommited引入的變化,你可以在成功的「git合併」後立即「git reset HEAD ^」,這將退回到一個提交,離開所有上次提交更改(這將是一個合併提交)uncommited。 – 2011-03-02 10:02:07

回答

25

Linus Torvalds在創建Git時設置的目標是使所有可以自動解決的合併... FAST。看到他的2007 Google Tech Talk: Linus Torvalds on Git (transcript)
即使。在幾秒鐘內完成數百次合併。

因此,默認情況下「--no-commit」幾乎可以達到這個目的。

使用--no-commit執行合併,但假裝合併失敗並且不自動提交,以使用戶有機會在提交之前檢查並進一步調整合並結果。從Linus's talk (video)

提取物:

唯一重要的事情是你的速度有多快可以合併
在git中,你可以合併......我每天合併多達22,000個文件,如果一個合併需要超過5秒,我會感到不快,並且所有這5秒只是下載所有的差異,而不是差異但它是兩棵樹之間的三角洲,合併本身不到半秒。
我不必考慮這個問題。
[...]這種表現實際上改變了你的工作方式。

+0

好的,基本上假設是,如果你正在合併你想要做的事情,並且你想盡快完成它, – Will 2011-03-02 07:26:33

+2

@ will:是的,但不要忘記其他工作流程:在合併前重新分配工作(這會導致快速合併:http://stackoverflow.com/questions/804115/git-rebase-vs - 合併/ 804178#804178) – VonC 2011-03-02 07:31:34

+0

視頻從你在這個答案中引用的談話 http://www.youtube.com/watch?v=4XpnKHJAok8&feature=player_detailpage#t=3118s – Will 2012-06-03 07:45:07

相關問題