196

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.

Étienne Miret
  • 6,007
  • 4
  • 22
  • 34
Ondra Žižka
  • 40,240
  • 36
  • 196
  • 259
  • 3
    @EugenKonkov It's not a duplicate because this question is asking how to diff **different files** in different branches. The linked question only asks how to diff the **same file** in different branches. – Steve Jul 07 '18 at 03:58

5 Answers5

251
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
twaggs
  • 3,331
  • 1
  • 13
  • 8
  • 11
    Awesome! I was certainly not able to infer that from `git help diff`. By the way, those don't have to be branch names ahead of the colons, but can be any kind of commit references (e.g. SHA-1 values). – Steve Jorgensen Jun 29 '12 at 19:16
  • 3
    Important Note: Git on windows requires the full itemspec to be a unix name. i.e. branch1:full\path\to\foo.txt fails, while branch1:full/path/to/foo.txt works fine, as does full\path\to\foo.txt (no branch) – Eris Nov 20 '13 at 20:51
  • use `git difftool` and then drop the `branch2:` and that will allow you to edit a file in the current working tree (to bring over changes from `branch1`) – gMale Oct 06 '17 at 02:17
  • 1
    Tried on linux with git version 1.8.3.1, only relative paths allowed. – Sola Yang Nov 15 '17 at 22:20
24

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
Campa
  • 3,893
  • 3
  • 32
  • 37
6

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>
Romain Valeri
  • 17,132
  • 3
  • 30
  • 49
3

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

Javier C.
  • 6,855
  • 4
  • 36
  • 51
0

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
Bob Dalgleish
  • 8,057
  • 4
  • 31
  • 41
JCF
  • 369
  • 3
  • 15
  • This is only comparing the same file in two branches; the question was about two different files in two branches. – Piran Apr 08 '20 at 16:26
  • @Piran and I landed on this question because I wanted to compare the same file in two branches so I'm happy this answer exists. – Matthieu Mar 30 '22 at 12:16