Git: How to diff two different files in different branches?

GitGit Diff

Git Problem Overview


I have two different files in different branches. How can I diff them in one command?

Something like

# git diff branch1/foo.txt branch2/foo-another.txt

I could check out the other file, diff it and restore, but that's quite dirty solution.

Git Solutions


Solution 1 - Git

git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

You can also use relative paths:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

Solution 2 - Git

Sidenote: no need for full paths, you can start with ./ for relative paths. It can be handy sometimes.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

Solution 3 - Git

Off-topic answer -- diffing the same file in different branches

Just to add it for I find it a very straightforward syntax :

git diff <branch1> <branch2> <filepath>

Also works with relative refs like for example :

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

Solution 4 - Git

There are many ways to compare files from two diferents branchs. For example:

  • If the name is the same or different:

      git diff branch1:file branch2:file
    

    Example:

      git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Only if the name is the same and you want to compare your current working directory to some branch:

     git diff ..someBranch path/to/file
    

    Example:

     git diff ..branch2 full/path/to/foo.txt
    

> In this example you are comparing the file from your actual branch to > the file in the master branch.

You can check this response:

Compare a file from two different branchs in Git

Solution 5 - Git

You can specify a start and range for git diff to be applied to. The range is indicated with the .. notation.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOndra ŽižkaView Question on Stackoverflow
Solution 1 - GittwaggsView Answer on Stackoverflow
Solution 2 - GitCampaView Answer on Stackoverflow
Solution 3 - GitRomain ValeriView Answer on Stackoverflow
Solution 4 - GitJavier C.View Answer on Stackoverflow
Solution 5 - GitJCFView Answer on Stackoverflow