How to compare files from two different branches?
I have a script that works fine in one branch and is broken in another. I want to look at the two versions side-by-side and see what's different. Are there any ways to do this?
To be clear I'm not looking for a compare tool (I use Beyond Compare). I'm looking for a git diff command that will allow me to compare the master version to my current branch version to see what has changed. I'm not in the middle of a merge or anything. I just want to say something like
git diff mybranch/myfile.cs master/myfile.cs
git diff
can show you the difference between two commits:
git diff mybranch master -- myfile.cs
Or, equivalently:
git diff mybranch..master -- myfile.cs
Using the latter syntax, if either side is HEAD
it may be omitted (eg master..
compares master
to HEAD
).
You may also be interested in mybranch...master
(from git diff
docs):
This form is to view the changes on the branch containing and up to the second <commit>
, starting at a common ancestor of both <commit>
. git diff A...B
is equivalent to git diff $(git-merge-base AB) B
.
In other words, this will give a diff of changes in master
since it diverged from mybranch
(but without new changes since then in mybranch
).
In all cases, the --
separator before the file name indicates the end of command line flags. This is optional unless Git will get confused if the argument refers to a commit or a file, but including it is not a bad habit to get into. See https://stackoverflow.com/a/13321491/54249 for a few examples.
The same arguments can be passed to git difftool
if you have one configured.
You can do this: git diff branch1:file branch2:file
If you have difftool configured, then you can also: git difftool branch1:file branch2:file
Related question: How do I view git diff output with visual diff program
More modern syntax:
git diff ..master path/to/file
The double-dot prefix means "from the current working directory to". You can also say:
master..
, ie the reverse of above. This is the same as master
. mybranch..master
, explicitly referencing a state other than the current working tree. v2.0.1..master
, ie referencing a tag. [refspec]..[refspec]
, basically anything identifiable as a code state to git. 下一篇: 如何比较来自两个不同分支的文件?