2013-08-28 109 views
3

爲什麼我不能將merge變成裸回購?裸回購沒有HEAD或工作樹。在配置文件中我們可以看到bare=true爲什麼你不能合併在一個裸git回購?

您也不能在pull裸露的回購(因爲拉取= &合併和合並不起作用)。但是,您可以推到裸回購 - 爲什麼?據我所知,push也包含合併,但在這種情況下,我們可以做得很好。

因此,問題可能是「git merge如何工作?」。爲什麼它需要HEAD?合併時它在做什麼?

+1

推並不在目標回購中進行合併。它只做一個快進合併,這不是真正的合併,而只是將分支頭移動到別的地方。 – Chronial

回答

1

As Chronial points out,推動快進合併或強制更新,它只是將引用/分支指針移動到不同的提交。

在實際的非快進合併中,如果遇到需要解決的衝突,則需要工作副本。其他Stack Overflow用戶已經提到過它;例如,見this answer(重點煤礦):

混帳執行對工作樹中的所有合併-Y操作(真正的合併,櫻桃挑選,底墊,補丁應用程序)。這是在知識淵博的JakubNarębski的回答中提及了前幾次,例如:

有沒有辦法,合併(或重訂),可在不接觸的工作目錄(指數)工作,因爲不可能是必須使用工作目錄(和/或索引)解決的合併衝突。

+0

我對不對?當git合併時 - 首先查找它的數據庫。 Git比較哈希(如果它們不同 - 將2個文件的快照解壓縮並在裏面比較)。爲什麼git需要工作目錄從它自己的數據庫合併兩個提交的分支? –

+0

第二個評論和問題。當我們合併時 - git首先做什麼?它試圖比較哈希值,但哈希值是什麼?當前分支的哈希和早午合併。當我們拉到光禿禿的回購協議時,git會做什麼? Git嘗試尋找當前早午餐的散列(甚至在裸回購中,我們有主早午餐),git查找主的頭以找到最後使用的(HEAD)提交的哈希,但裸回購沒有HEAD(即使工作樹)。所以它會得到錯誤。這是真的?請糾正我。 –