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 -0400Add feature 2
commit b722f1650b9fb33e0990beec027c097526c61478
Author: John
Date: Wed Jul 8 22:31:18 2015 -0400Add 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: JohnDate: 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
Comments
Leave a comment Trackback