Unable to diff files in two separate branches in Git
You can use "git mergetool" for merging, and in modern git (meaning version 1.6.3 and later) "git difftool" for comparing using graphical tools. Of course you would have to configure them first, but they do some autodetection (with some hardcoded preference, of course), and if I remember correctly opendiff support is built in.
And then of course you would be able to use your graphical tool (opendiff / FileMerge) as you would use ordinary "git diff", for example
prompt> git difftool somebranch:UNREADME otherbranch:README
git supports branch names as part of the repository paths. Eg if you have the following files in your repository, README
only on master
, and UNREADME
only on branch
:
master:README
branch:UNREADME
You can diff them via git with:
git diff branch:UNREADME master:README
You can get a repository artifact to standard output with git show
:
git show branch1:UNREADME
So if your external diff utility can take 2 files on the bash prompt, you can diff them with something like:
diff-command <(git show branch1:UNREADME) <(git show master:README)
Where the <(...)
bash syntax takes the output of the enclosed command, runs it in a pipe and places the file path of the pipe on the command line.
If you're currently checkout out to branchA, for example, you can use the command:
git diff branchB path/to/common/file/between/branches.txt
You can then edit the diff if you want a subset of the changes, or leave it as is, and git apply
the diff as a patch. As for a GUI tool that does this, hopefully someone else will have a suggestion there.
From the docs, you need something similar to the following in your .git/config file:
# Our diff algorithm
[diff]
external = opendiff