假設我在文件A中有函數X,並且我想將該函數移動到文件B.同時,其他人對文件A中的函數X進行了更改。git如何處理移動到不同文件的合併代碼?
當合並這兩個函數時,git會做些什麼特殊的事情嗎?變化?它會認識到相同的功能已移到文件B並在其中應用更改嗎?或者我們最終會失去更改還是在文件A和B中有兩個相同功能的副本?
我發現的大多數關於在git中移動代碼的文章主要是重命名整個文件,而不是文件內代碼塊。我發現的最接近的是一個blurb from Linus at kerneltrap:
而且使用Git時,整個 「保持 代碼運動的變化分離」有一個更根本的原因: 的git可以跟蹤代碼運動(再次, 是否移動一個完整的文件或只是一個文件之間的函數),並且執行一個 'git blame -C'實際上會跟隨 代碼在文件之間移動。它 ,通過相似性分析,但它 確實意味着,如果同時移動 代碼,並在同一時間改變它, 混帳不能看到「哦,這個函數 從其他文件最初來自」 ,現在你會得到更糟的註釋 關於代碼實際來源。
所以看起來git會認識到代碼被移動到其他地方,但並沒有真正說明在合併過程中會發生什麼。
這樣的變化到A中的X到我的分支中,我將X移動到B,我基本上會失去這些更改,因爲Git認爲我刪除了這些行?我想我只需要仔細看看差異,然後... – jtjin 2009-12-13 21:21:49
你不會失去他們:你必須手工合併衝突。 – 2009-12-13 21:42:08