[英]How can I do a three way graphical diff (not merge) with git?
我在git中有兩個相似的分支,我想手動將這些更改拉到完全不同的第三個分支中。 是否可以對這些更改進行三向圖形化比較?
當前已設置兩個分支的圖形差異,並且可以很好地與“ meld”配合使用。 以下顯示了預期的圖形化融合窗口:
我嘗試執行以下操作,但獲得了“ diff --cc”的ASCII輸出。
這是獲得三向差異的有效語法嗎? 什么是正確的.gitconfig設置才能將其打開? 我正在使用Git版本1.8.2.1。
我的期望是在一個融合窗口中打開這三個文件,然后我可以查看branch1 / branch2之間的更改,然后從視覺上確保相同的更改在master中。 我剛剛意識到,可以通過從三個分支中分別檢出每個文件,然后將文件名作為參數直接傳遞給meld來做到這一點。 可以按照以下SO答案進行結帳: https : //stackoverflow.com/a/888623/350265
手動一線指令
通過將bash中的<(cmd)
語法與git show
思想結合使用,可以在文件的三個版本上調用meld
,而無需使用臨時文件:
meld <(git show master:file) <(git show branch1:file) <(git show branch2:file)
這將彈出文件文件dev/fd/61
, /dev/fd/62
和/dev/fd/63
引用三個分支中的文件。 名稱不是很友好,但是您會習慣的。 關鍵是它將顯示您想要看到的內容。
編寫腳本
顯而易見的下一步是使用腳本簡化語法:
創建文件~/bin/git-meld3
(或PATH上的其他任何位置):
#!/bin/bash
meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
使它可執行:
chmod +x ~/bin/git-meld3
稱它為:
git meld3 master branch1 branch2 myfilename
該命令適用於任何committish:
git meld3 master 36d1cf756 HEAD^^^ myfilename
更加靈活的腳本
此~/bin/git-meld
腳本接受兩個或三個承諾:
#!/bin/bash
if [[ $# -eq 3 ]]; then
meld <(git show $1:$3) <(git show $2:$3)
elif [[ $# -eq 4 ]]; then
meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
else
echo Usage: git meld committish1 committish2 [committish3] file >&2
exit 1
fi
PS
在我自己的機器上,我必須像這樣調用meld: python2.6 /usr/bin/meld
,可能是因為未正確安裝,所以這是我的實際~/bin/git-meld3
腳本:
#!/bin/bash
python2.6 /usr/bin/meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
熔渣老了! 該腳本說它需要Python 2.4,但是不能用2.7或3編譯。所幸,它確實可以用2.6運行,因此我能夠測試我的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.