Skip to contentSkip to conversation

git-diff across branches?

DISCUSSION Gonzalo Garramuño 3 participants 3 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

I was wondering if there was a way to make a git-diff across (local) branches.

Something like:

$ git-diff --branch test1 HEAD --branch test2 HEAD  file.cpp
(would show a diff for file.cpp between test1 HEAD and test2 HEAD)
Signature · 6 lines
Gonzalo Garramuño
[email protected]

AMD4400 - ASUS48N-E
GeForce7300GT
Xubuntu Gutsy
#1 lore raw
Quoted 7 lines · Gonzalo Garramuño

I was wondering if there was a way to make a git-diff across (local) branches.

Something like:

$ git-diff --branch test1 HEAD --branch test2 HEAD  file.cpp
(would show a diff for file.cpp between test1 HEAD and test2 HEAD)

I think you are mistaken about how HEAD works; it is a pointer to a particular branch. So there is no "HEAD" for test1; there is simply test1, and from time to time your repository's HEAD points to test1.

However, that makes things easier. You can simply do this:

git-diff test1 test2 file.cpp

Unless you mean that you have two separate repositories, test1 and test2. In which case each _does_ have its own HEAD, and you will have to fetch from one repo into the other to get your answer:

  # go into one of the repos
  cd test1
  # fetch the 'master' ref from the other repo and store it in this repo
  # using the name 'test2'
  git fetch ../test2 master:test2
  # now we can diff between them
  git diff HEAD test2 file.cpp

-Peff

#2 lore raw
Quoted 10 lines · Jeff King
Quoted 7 lines · Gonzalo Garramuño

I was wondering if there was a way to make a git-diff across (local) branches.

Something like:

$ git-diff --branch test1 HEAD --branch test2 HEAD  file.cpp
(would show a diff for file.cpp between test1 HEAD and test2 HEAD)
Quoted 7 lines

I think you are mistaken about how HEAD works; it is a pointer to a particular branch. So there is no "HEAD" for test1; there is simply test1, and from time to time your repository's HEAD points to test1.

However, that makes things easier. You can simply do this:

git-diff test1 test2 file.cpp

Canonically it is

  # git diff test1 test2 -- file.cpp

but you can also use (for example if file was renamed)

  # git diff test1:file.cpp test2:file.cpp
Quoted 3 lines

Unless you mean that you have two separate repositories, test1 and test2. In which case each _does_ have its own HEAD, and you will have to fetch from one repo into the other to get your answer:

[cut]

Not necessary. If those two repositories are on the same local filesystem, you can use trick from GitTips:

http://git.or.cz/gitwiki/GitTips#head-9f79516c05f0c1b51945b848adb3dd1c5a2bf016

(assuming we are in test1, and ../test2 is relative path to test2)

  # GIT_ALTERNATE_OBJECT_DIRECTORIES=../test2/.git/objects git diff-tree \
     $(GIT_DIR=../test2/.git git rev-parse --verify HEAD) HEAD
Signature · 3 lines
Jakub Narebski
Poland
ShadeHawk on #git