2012-01-12 65 views
11

我目前正在看git的很多內容跟蹤功能。很高興知道git允許我找出已經從一個文件移動到另一個文件的代碼,但是我想知道在合併中執行衝突解決時這個特性是如何可用的。如何讓git正確合併移動的內容(不僅僅是文件)

下面是這種情況:

我有兩個文件hello.cc創造bye.cc。我開始一個分支topic並將一些代碼從hello.cc移動到bye.cc。如果我現在做一個git blame -C bye.cc我可以看到這個代碼最初來自hello.cc,這很好理解。但是現在,我切換到原始分支而沒有移動內容,並且更改hello.cc中已在其他提交中移動的部分中的某些代碼。如果我現在執行git merge topic,我得到的衝突爲hello.cc。但是,除非我使用diff3樣式(但我通常會這樣做),但我只能看到此方法已從其他分支中的hello.cc中刪除,但不是之後已更改。最好是在bye.cc上也會發生衝突,因爲有必要檢查是否必須將其他分支的更改重新應用於代碼。這是否有可能?

我知道我可以手工弄清楚,代碼已被移動了git blame --reverse -C topic...。然而,一個人花了我相當長的時間才弄清楚這種可能性,其他大多數人可能不知道。對於第二,我很懶,可能會忘記代碼可能已被移動。此外,我不確定這是否適用於代碼已移至多個文件。

如何保持這種情況儘可能安全?

編輯

我剛剛發現git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic還致力於找出的內容感動。如果我確實瞭解git,這可能會更快,因爲它不會完整搜索整個存儲庫中的內容。

編輯

我上傳了我使用的庫玩各地github,所以你可以嘗試合併自己。我移動函數的提交位於主題分支中。分支merge_here的HEAD中相同功能在主服務器上發生更改的提交。主人還有一個額外的提交,其中我正在玩一些其他合併技巧,您應該忽略這個問題。

回答

-4

你可以使用git把任何東西放入你的提交中,它會正常工作。

+0

是肯定。我知道這一點。但是讓git通過工具使用或通過合併衝突給我提示和警告什麼要投入提交的最佳方式是什麼? – LiKao 2012-01-15 15:02:30

0

不幸的是,與我的代碼一樣,在git中移動文件後,它無法識別分支合併期間的更改。 看來,金科玉律一個要引導與移動的工作是:

保持代碼運動從變化

GIT不能跟蹤這樣的情況下分開,因爲現在。而且似乎沒有快速/自動化的解決方案,可以在文件移動和合並後找出潛在的問題。

即使你知道,這兩個承諾問題出在哪裏發生,並會嘗試應用補丁或者恢復移動後丟失的更改+合併,你還是會得到混帳都拒絕:

'git apply' failed with code 1:'error: patch failed: filename.js:81' 
相關問題