How are the commands git log -p
, git show
, and git diff
related and why would one be used over another?
Given a repo with the following 4 commits:
commitd - last commit
commitc
commitb
coomita - initial commit
What are the differences between the following git commands?:
git log -p commitb commitd git show commitb commitd git diff commitb commitd git log -p commitd commitb git show commitd commitb git diff commitd commitb git log -p commitb..commitd git show commitb..commitd git diff commitb..commitd git log -p commitd..commitb git show commitd..commitb git diff commitd..commitb git log -p commitb...commitd git show commitb...commitd git diff commitb...commitd git log -p commitd...commitb git show commitd...commitb git diff commitd...commitb
Git Show command is similar to git log in terms of output. Git show also presents you the output in the same format as we studied in the git log tutorial. A slight difference is that the git show command shows you two things: The commit to which HEAD is pointing.
The main difference between the commands is that git diff is specially aimed at comparisons, and it's very powerful at that: It can compare commits, branches, a single file across revisions or branches, etc. On the other hand, git status is specifically for the status of the working tree.
Comparing changes with git diff Diffing is a function that takes two input data sets and outputs the changes between them. git diff is a multi-use Git command that when executed runs a diff function on Git data sources. These data sources can be commits, branches, files and more.
You can run the git diff HEAD command to compare the both staged and unstaged changes with your last commit. You can also run the git diff <branch_name1> <branch_name2> command to compare the changes from the first branch with changes from the second branch.
git log A B
shows the history of both commits A
and B
(basically generating a union set of each commits' history). Usually you want git log A..B
, which can also be written as git log ^B A
(show everything reachable from A, but not (^
) from B). This range can also be empty (for instance B..A
would be empty, since every commit reachable from B
is also reachable from A
). Therefore, you also get no output from git log
when used with the "wrong" arguments.
git show
is a very versatile command and produces different output depending on its arguments. You can pass one or several commits and it will show you the commit information (authorship, timestamp, commit message, diff from previous commit). Commit ranges such as a..d
will be resolved and each commit is shown individually. You can also pass a path and git show
will show you the file's contents. You can also specify a file at a certain revision with the syntax commit:path/to/file
. If you pass a directory, git show
will display the commit information of the last commit changing that directory.
git diff
generally expects two trees or two files to compare. (It can also take no arguments and compare the index/staging area instead). A commit is automatically unwrapped into its corresponding tree (a tree object describes a certain state of the repository). The syntax A..B
is silently resolved to A B
for the diff case and will show the changes required to get from commit/tree A
to B
The range A...B
means "every commit reachable from A or B, but not from both".
git log
it will show you those commits and it mostly only makes sense when used with diverged branches, i.e. "show every that's different between the two, but hide those commits which both branches have in common".git diff
this syntax is syntactic sugar for git diff $(git merge-base A B) B
, i.e. "changes in B
since the history of A
diverged.git show
you will simply get commit information for each single commit in that range.If anything's still unclear let me know in the comments.
Here's the output the repository you posted in your original question:
$ git init Initialized empty Git repository in ... $ cd SO $ ls $ echo a > a $ git add a $ git commit [master (root-commit) 7b66fe5] initial commit 1 file changed, 1 insertion(+) create mode 100644 a $ git tag a $ echo b >> a $ echo b > b $ git add a b $ git commit [master ee884fe] commit b 2 files changed, 2 insertions(+) create mode 100644 b $ git tag b $ echo c >> a $ echo c >> b $ echo c > c $ git add a b c $ git commit [master 8abaaff] commit c 3 files changed, 3 insertions(+) create mode 100644 c $ git tag c $ echo d >> a $ echo d > b $ git add a b $ git commit [master 08adc85] commit d 2 files changed, 2 insertions(+), 2 deletions(-) $ git tag d $ git log -p b d -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c commit ee884fea5d0266280845348175ac0af5083a9bbf Author: ... Date: Mon Sep 1 17:21:05 2014 +0200 commit b diff --git a/a b/a index 7898192..422c2b7 100644 --- a/a +++ b/a @@ -1 +1,2 @@ a +b diff --git a/b b/b new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/b @@ -0,0 +1 @@ +b commit 7b66fe5999039c53ffbe5a5ffe07c13a5c213455 Author: ... Date: Mon Sep 1 17:20:39 2014 +0200 initial commit diff --git a/a b/a new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/a @@ -0,0 +1 @@ +a $ git show b d -- commit ee884fea5d0266280845348175ac0af5083a9bbf Author: ... Date: Mon Sep 1 17:21:05 2014 +0200 commit b diff --git a/a b/a index 7898192..422c2b7 100644 --- a/a +++ b/a @@ -1 +1,2 @@ a +b diff --git a/b b/b new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/b @@ -0,0 +1 @@ +b commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d $ git diff b d -- diff --git a/a b/a index 422c2b7..d68dd40 100644 --- a/a +++ b/a @@ -1,2 +1,4 @@ a b +c +d diff --git a/b b/b index 6178079..4bcfe98 100644 --- a/b +++ b/b @@ -1 +1 @@ -b +d diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git log -p d b -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c commit ee884fea5d0266280845348175ac0af5083a9bbf Author: ... Date: Mon Sep 1 17:21:05 2014 +0200 commit b diff --git a/a b/a index 7898192..422c2b7 100644 --- a/a +++ b/a @@ -1 +1,2 @@ a +b diff --git a/b b/b new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/b @@ -0,0 +1 @@ +b commit 7b66fe5999039c53ffbe5a5ffe07c13a5c213455 Author: ... Date: Mon Sep 1 17:20:39 2014 +0200 initial commit diff --git a/a b/a new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/a @@ -0,0 +1 @@ +a $ git show d b -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit ee884fea5d0266280845348175ac0af5083a9bbf Author: ... Date: Mon Sep 1 17:21:05 2014 +0200 commit b diff --git a/a b/a index 7898192..422c2b7 100644 --- a/a +++ b/a @@ -1 +1,2 @@ a +b diff --git a/b b/b new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/b @@ -0,0 +1 @@ +b $ git diff d b -- diff --git a/a b/a index d68dd40..422c2b7 100644 --- a/a +++ b/a @@ -1,4 +1,2 @@ a b -c -d diff --git a/b b/b index 4bcfe98..6178079 100644 --- a/b +++ b/b @@ -1 +1 @@ -d +b diff --git a/c b/c deleted file mode 100644 index f2ad6c7..0000000 --- a/c +++ /dev/null @@ -1 +0,0 @@ -c $ git log -p b..d -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git show b..d -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git diff b..d -- diff --git a/a b/a index 422c2b7..d68dd40 100644 --- a/a +++ b/a @@ -1,2 +1,4 @@ a b +c +d diff --git a/b b/b index 6178079..4bcfe98 100644 --- a/b +++ b/b @@ -1 +1 @@ -b +d diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git log -p d..b -- $ git show d..b -- $ git diff d..b -- diff --git a/a b/a index d68dd40..422c2b7 100644 --- a/a +++ b/a @@ -1,4 +1,2 @@ a b -c -d diff --git a/b b/b index 4bcfe98..6178079 100644 --- a/b +++ b/b @@ -1 +1 @@ -d +b diff --git a/c b/c deleted file mode 100644 index f2ad6c7..0000000 --- a/c +++ /dev/null @@ -1 +0,0 @@ -c $ git log -p b...d -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git show b...d -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git diff b...d -- diff --git a/a b/a index 422c2b7..d68dd40 100644 --- a/a +++ b/a @@ -1,2 +1,4 @@ a b +c +d diff --git a/b b/b index 6178079..4bcfe98 100644 --- a/b +++ b/b @@ -1 +1 @@ -b +d diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git log -p d...b -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git show d...b -- commit 08adc8512e63588e6f01533b2a0f762342521b05 Author: ... Date: Mon Sep 1 17:22:06 2014 +0200 commit d diff --git a/a b/a index de98044..d68dd40 100644 --- a/a +++ b/a @@ -1,3 +1,4 @@ a b c +d diff --git a/b b/b index 9ddeb5c..4bcfe98 100644 --- a/b +++ b/b @@ -1,2 +1 @@ -b -c +d commit 8abaaff681be0bcaa16c946feb2989959348c9f4 Author: ... Date: Mon Sep 1 17:21:40 2014 +0200 commit c diff --git a/a b/a index 422c2b7..de98044 100644 --- a/a +++ b/a @@ -1,2 +1,3 @@ a b +c diff --git a/b b/b index 6178079..9ddeb5c 100644 --- a/b +++ b/b @@ -1 +1,2 @@ b +c diff --git a/c b/c new file mode 100644 index 0000000..f2ad6c7 --- /dev/null +++ b/c @@ -0,0 +1 @@ +c $ git diff d...b -- $
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With