问题
Is it possible to set Git up so that I can use the three-way compare in KDiff3?
I have two branches that are far too different to auto-merge them, I simply have to check each merge point and I think the best way would be to check out the branch I want the changes from the other branch and say
git difftool HEAD_OF_OTHER_BRANCH -- .
And then select Merge File in KDiff3. After having gone through the files I'd just commit.
I have set up merge.conflictstyle and diff.conflictstyle to diff3 but KDiff3 still starts with a two-way diff. Is this possible? I guess if Git also sends the common ancestor's hash as a parameter, this is possible, but does it?
There is discussion about how to do this with SVN and BC3, but I couldn't find anything for Git and KDiff3.
回答1:
It seems that git diff do only a 2-way diff (which make sense to generate patch etc) except in a merging state , you have to do a merge for that. I was in a similar situation the other day and I ended up mergin using the ours
strategy. That worked but wasn't ideal. Maybe we need a 'nonresolve' merging strategy which doesn't try to resolve any conflicts. You might be able to emulate that by tweaking the .git/MERGE_* files and set all the files as conflicted.
Otherwise the obvious solution is to checkout 3 different directory and run kdiff3 , but I guess you are looking for a more elegant solution
回答2:
Run this on the command line:
git config --global mergetool.kdiff3.path /path/for/your/kdiff3/binary
Then, when solving conflicts you just have to do:
git mergetool --tool=kdiff3
来源:https://stackoverflow.com/questions/3635788/doing-a-three-way-compare-with-git-and-kdiff3