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


Translate

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.


All Answers
  • Translate
    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
    

  • Translate

    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
    

  • Translate

    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


  • Translate

    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>
    

  • Translate

    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