Showing Differences Between two Git Commits
From time to time I get questions about how to check differences between two Git commits or two branches, I will answer those questions in this post.
How to check differences between two branches:
Example: you have a dev branch and a master branch. You develop in the dev branch and would like to know if you were to merge the dev changes to master, what will those changes be: Please note the order of the branch this states differences that will be added to master from dev.
$ git diff master dev
How to check differences between two commits:
Example: When you do git log you will see your different commits over time, you need to check the differences between two commits.
commit eab54d0ec21a1d7e351fee4c67139ada740e7e6b Author: John Date: Wed Jul 8 22:18:05 2015 -0400
Add feature 2
commit b722f1650b9fb33e0990beec027c097526c61478 Author: John Date: Wed Jul 8 22:31:18 2015 -0400
Add feature 1
// Remember the order the first argument is the point in time, and the second item is what is added to the first argument’s commit
$ git diff b722f1650b9fb33e0990beec027c097526c61478 eab54d0ec21a1d7e351fee4c67139ada740e7e6b
diff --git a/test/script.sh b/test/script.sh
index 33f9e16..cc40434 100755
--- a//test/script.sh
+++ b//test/script.sh
@@ -14,7 +14,7 @@ fi
...
-blah1
+blah2
...
How to check differences between the HEAD (current state/latest revision) and a previous commit:
$ git diff HEAD b722f1650b9fb33e0990beec027c097526c61478
diff --git a/test/script.sh b/test/script.sh
index 33f9e16..cc40434 100755
--- a//test/script.sh
+++ b//test/script.sh
@@ -14,7 +14,7 @@ fi
...
-blah1
+blah2
...
Or you can specify the last commit or a number of commits:
// Last commit
$ git diff HEAD~1
diff --git a/test/script.sh b/test/script.sh
index 33f9e16..cc40434 100755
--- a//test/script.sh
+++ b//test/script.sh
@@ -14,7 +14,7 @@ fi
...
-blah1
+blah2
...
//Last 2 commits
$ git diff HEAD~2
diff --git a/test/script2.pp b/test/script2.pp
index 8def87e..be66b71 100644
--- a/test/script2.pp
+++ b/test/script2.pp
@@ -4,11 +4,10 @@
class test {
- stage { "first": before => Stage["main"] }
- class { "repos": stage => "first" }
+ class { "test": stage => "first" }
- class repos {
+ class test {
...
diff --git a/test/script.sh b/test/script.sh
index 33f9e16..cc40434 100755
--- a//test/script.sh
+++ b//test/script.sh
@@ -14,7 +14,7 @@ fi
...
-blah1
+blah2
...
How to check what changed since yesterday or a specific date:
git diff @{yesterday}
diff --git a/.gitignore b/.gitignore
index 4327d2e..8fa1531 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
-.svn
-.project
+.com_puppetlabs_geppetto_pptp_target/
+.metadata/
+Geppetto.AutoFileSystemLinked/
// OR a specific date
git diff @{2015-05-01}
diff --git a/.gitignore b/.gitignore
index 4327d2e..8fa1531 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
-.svn
-.project
+.com_puppetlabs_geppetto_pptp_target/
+.metadata/
+Geppetto.AutoFileSystemLinked/
How to check all changes to a specific file:
$ git log --follow /path/to/file
commit eab54d0ec21a1d7e351fee4c67139ada740e7e6b
Author: John
Date: Wed Jul 8 22:18:05 2015 -0400
Add feature 2
commit b722f1650b9fb33e0990beec027c097526c61478
Author: John
Date: Wed Jul 8 22:31:18 2015 -0400
Add feature 1
How to check size differences between two trees
I found this one in stackoverflow and has been very useful:
Reference Source: http://stackoverflow.com/questions/10845051/git-show-total-file-size-difference-between-two-commits/10847242#10847242
“git cat-file -s will output the size in bytes of an object in git. git diff-tree can tell you the differences between one tree and another. Putting this together into a script called git-file-size-diff located somewhere on your PATH will give you the ability to call git file-size-diff . Putting this together we can try something like the following” - Stackoverflow
$ cat /usr/local/bin/git-file-size-diff
#!/bin/sh
. git sh-setup
args=$(git rev-parse --sq "$@")
eval "git diff-tree -r $args" | {
total=0
while read A B C D M P
do
case $M in
M) bytes=$(( $(git cat-file -s $D) - $(git cat-file -s $C) )) ;;
A) bytes=$(git cat-file -s $D) ;;
D) bytes=-$(git cat-file -s $C) ;;
*)
echo >&2 warning: unhandled mode $M in \"$A $B $C $D $M $P\"
continue
;;
esac
total=$(( $total + $bytes ))
printf '%d\t%s\n' $bytes "$P"
done
echo total $total Bytes
echo total $(($total/1000)) KBytes
}
// Using it to check size differences between two branches:
$ git file-size-diff master dev
66 .gitignore
239 modules/test/Modulefile
171 modules/test/README
167 modules/test/files/file.txt
1425 modules/test/manifests/init.pp
total 2068 Bytes
total 2 KBytes
// Using it to check size differences between the local master branch and the remote master branch, this is useful to know how much data will be downloaded when doing a ‘git pull’:
$ git file-size-diff master origin/master
633 modules/test/manifests/config.pp
326 modules/test/manifests/service.pp
60 modules/test/manifests/params.pp
573 modules/test/manifests/install.pp
13 modules/test/manifests/init.pp
86 modules/mod/manifests/params.pp
total 1691 Bytes
total 1 KBytes