2013-02-04 50 views
2

在商場之間的差異,如果你有foo.html衝突,將進行額外的3個文件混帳衝突:基礎版本和其他版本的

foo.html.BASE 
foo.html.OTHER 
foo.html.THIS 

然後你就可以

diff -Naur foo.html.BASE foo.html.OTHER 

比較與另一組變更的共同基礎是非常有用的,因爲它告訴你他們改變了什麼,這有助於回答他們爲什麼做了改變。例如,如果他們所有的變化都是空白的,你可以放心地使用你自己的改變。

如何在git中完成此操作?

回答

3

git這三個文件的實際完整拷貝版本不會存儲在你的工作目錄。相反,它會存儲放置衝突標記的單個文件。但是,仍然可以使用:<stage>:<filename>語法獲得這些版本(至git工具 - 文件實際上不存在,因此,例如,正常的diff將不會看到它們)。因此,例如,您可以運行git diff :1:foo.html :2:foo.html以查看BASETHIS之間的差異。第3階段將是您的OTHER版本。您也可以使用git mergetool foo.htmlgit difftool foo.html。如果你真的需要他們使用非git工具,你可以這樣做:

git show :1:foo.html > foo.html.BASE 
git show :2:foo.html > foo.html.THIS 
git show :3:foo.html > foo.html.OTHER 
diff ...... 
2

要在外部工具中獲取文件之間的簡單差異,可以使用git difftool

在解決衝突的情況下,您也可以使用git mergetool

他們共享一組配置和使用選項,但git mergetool實際上會創建類似於您從Bazaar知道的文件。有關詳細信息在上面鏈接的手冊頁中進行了介紹。

difftoolmergetool瞭解一些常見的diff和合並工具可以使用,而不必再配置(例如vimdiff同時,合併,k3diff等),但你可以配置你自己或使用自定義選項來改變行爲的工具。

你應該試着讓mergetool做你想做的事情(例如,mergetool可以配置爲在合併工具退出後不刪除這些文件,這樣你可以進一步檢查它們)。現在您已經有了一個起點,谷歌也會提供幫助,特別是如果手冊頁太過於技術性而不符合您的口味。

如果您遇到的具體問題,你可以打開一個新的問題;)

+0

還要檢查http://stackoverflow.com/questions/255202/how-do-i-view-git-diff -out-with-a-visual-diff-program t配置您選擇的差異工具... –