Son of the Wai-Pan
Son of the Wai-Pan

Reputation: 13191

How do I see the commit differences between branches in git?

I'm on branch-X and have added a couple more commits on top of it. I want to see all the differences between MASTER and the branch that I am on in terms of commits. I could just do a

git checkout master
git log

and then a

git checkout branch-X
git log

and visually diff these, but I'm hoping for an easier, less error-prone method.

Upvotes: 538

Views: 375405

Answers (11)

Terry Tú Nguyễn
Terry Tú Nguyễn

Reputation: 380

To see all the commits like what you gonna see in "Commits" tab of your PR, run these:

1. Basic:

git log --oneline origin/base..origin/my-branch

2. If you don't want branches/tags, add --no-decorate

git log --oneline --no-decorate origin/base..origin/my-branch

3. If you want to sort commits chronologically (oldest first), add --reverse

git log --oneline --no-decorate --reverse origin/base..origin/my-branch

It took me a while to find these gorgeous. Hope it's helpful to someone.

Upvotes: 10

Maroun
Maroun

Reputation: 95948

If you want to compare based on the commit messages, you can do the following:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

Upvotes: 5

zainengineer
zainengineer

Reputation: 13889

I think it is matter of choice and context.I prefer to use

git log origin/master..origin/develop --oneline --no-merges

It will display commits in develop which are not in master branch.

If you want to see which files are actually modified use

git diff --stat origin/master..origin/develop --no-merges

If you don't specify arguments it will display the full diff. If you want to see visual diff, install meld on linux, or WinMerge on windows. Make sure they are the default difftools .Then use something like

git difftool -y origin/master..origin/develop --no-merges

In case you want to compare it with current branch. It is more convenient to use HEAD instead of branch name like use:

git fetch
git log origin/master..HEAD --oneline --no-merges

It will show you all the commits, about to be merged

Upvotes: 166

claudiu.f.marginean
claudiu.f.marginean

Reputation: 134

I used some of the answers and found one that fit my case ( make sure all tasks are in the release branch).

Other methods works as well but I found that they might add lines that I do not need, like merge commits that add no value.

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

or you can compare your current with master

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch is there to make sure you are using updated info.

In this way each commit will be on a line and you can copy/paste that into an text editor and start comparing the tasks with the commits that will be merged.

Upvotes: 8

AIon
AIon

Reputation: 13071

Not the perfect answer but works better for people using Github:

enter image description here

Go to your repo: Insights -> Network

Upvotes: 5

Kim Briggs
Kim Briggs

Reputation: 1

#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

Contributing this because it allows a and b logs to be diff'ed visually, side by side, if you have a visual diff tool. Replace diff command at end with command to start visual diff tool.

Upvotes: 0

mmaruska
mmaruska

Reputation: 578

I'd suggest the following to see the difference "in commits". For symmetric difference, repeat the command with inverted args:

git cherry -v master [your branch, or HEAD as default]

Upvotes: 32

snowcamel
snowcamel

Reputation: 711

if you want to use gitk:

gitk master..branch-X

it has a nice old school GUi

Upvotes: 10

mvp
mvp

Reputation: 116038

If you are on Linux, gitg is way to go to do it very quickly and graphically.

If you insist on command line you can use:

git log --oneline --decorate

To make git log nicer by default, I typically set these global preferences:

git config --global log.decorate true
git config --global log.abbrevCommit true

Upvotes: 16

tom
tom

Reputation: 19153

You can get a really nice, visual output of how your branches differ with this

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

Upvotes: 415

Pablo Fernandez heelhook
Pablo Fernandez heelhook

Reputation: 12503

You can easily do that with

git log master..branch-X

That will show you commits that branch-X has but master doesn't.

Upvotes: 970

Related Questions