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.
You can easily do that with
git log master..branch-X
That will show you commits that branch-X has but master doesn't.
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
git log --oneline --graph --all --decorate --abbrev-commit
will give you a similar output in a shorter/more readable command
git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
git log --oneline --graph --all --decorate
is enough, --abbrev-commit
is not required, --oneline
is short for --pretty=oneline --abbrev-commit
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
--no-merges
like: git log origin/master..HEAD --oneline --no-merges
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]
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
if you want to use gitk:
gitk master..branch-X
it has a nice old school GUi
Not the perfect answer but works better for people using Github:
https://i.stack.imgur.com/eCxXC.png
Go to your repo: Insights -> Network
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.
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)
--oneline
and piping to cut
you can use git log --format='%s'
#! /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.
Success story sharing
branch-X
you can usegit log master..
git log master...branch-X
(three dots instead of two). Seeman gitrevisions
for more info.