2015-05-10 64 views
3

如果我在一個rebase或其他合併的情況下結束了更復雜的衝突,我會創建一個「我的」和「他們的」文件,用我的IDE做一個視覺比較。然後我會開始手動修復差異,直到文件變得「相等」,然後我將複製對衝突文件和git add它的更改,而不是讀取和刪除<<<<<HEAD>>>>>>><<<<< current commit >>>>>部分。我可以讓git創建兩個文件來合併(我的和他們的)而不是一個

有沒有辦法通過創建「我的」和「他們的」文件來自動化零件?我只想在同一個目錄中有兩個具有兩個不同名稱的文件,而不必根據我自己的提交版本來檢出它們。

+0

運行[git mergetool](http://www.gitguys.com/topics/merging-with-a-gui/) – user3159253

+0

唯一值得注意的是這些工具的配置,特別是在Windows平臺上。我遇到了一些實用程序路徑中的空間問題,因此最好將這些utils安裝到名稱爲w/o空格的目錄中 – user3159253

+0

,如果您願意,可以將vimdiff用作3路合併工具[這裏是教程] VIM。也許你可以配置你最喜歡的IDE來作爲合併工具。 – user3159253

回答

2

要回答問題的問題,您需要git checkout-index --stage=。第一階段是合併基礎,即兩個歷史分道揚version的版本。第二階段是你的,第三階段是他們的。您可以git checkout-index --stage=all myfile,它會打印它爲每個人發明的名稱,例如

$ git checkout-index --stage=all file.txt 
.merge_file_a01172 .merge_file_b01172 .merge_file_c01172  file.txt 

有原來的比較可以很好。

+0

這太棒了。我從來不會對「checkout-index」的描述有所猜疑,你可以這樣做。文檔說它將文件從索引複製到工作目錄。但衝突文件在技術上是在工作目錄中,對嗎? – Jeff

+0

該索引通常會爲每個跟蹤路徑列出一些特定的內容ID,但是當您遇到合併衝突時,根據定義,沒有人知道哪些內容屬於 - 因此索引列出了所有三個ID的原始版本和兩個更改版本。 Git將「文件」視爲一個派生的,只有邊緣有用的概念,重要的是路徑名和內容的關聯。 – jthill

1

運行

git mergetool 

不正是你想要的。你所要做的就是配置你想要使用的合併工具(詳見man git-mergetool)。

它內置支持kdiff3,vimdiff(以三種不同的模式)和其他漂亮的工具,您可以擴展它以使用IDE作爲合併工具。

相關問題