Sunday, 3 January 2016

Git - log command

In this post I'll list the different flags for cruising through git commit logs of your repository.

To view complete details of each commit of current branch,
$ git log

To view only to n commits,
$ git log -n

To view one line log message with sha-1 values of last 5 commits,
$ git log --oneline -5
4b0deff Merge branch 'seo_title' into website
7aa136d Merge branch 'visiting_places' into website - 3 way
fec6334 Merge branch 'hotfix_correct_title' into website
3c32660 Adds last line to visiting places
63105a2 Corrects title and adds punch line

There is another option for oneline commits but it will print complete 40 characters of sha.
$ git log --format=oneline -2
4b0deff022231b7f2edf9941cbcf26b0df5a260d Merge branch 'seo_title' into website
7aa136da9c9aa3ad025dad0fee7d6e3bec48d3d2 Merge branch 'visiting_places' into website - 3 way

The other options which can be used with formatter flag are,
$ git log --format=oneline | short | medium | full | fuller | email | raw

You can also define your own pretty formats.

$ git log --pretty=format:"%h - %an, %ar : %s" -2
4b0deff - Alex, 7 days ago : Merge branch 'seo_title' into website
7aa136d - Alex, 7 days ago : Merge branch 'visiting_places' into website - 3 way

Following table taken from Pro Git summarizes different pretty formats.




To view log between two commits 
$ git log --oneline <sha-1_old_commit>..<sha-1_new_commit>
This will log all commit message excluding sha-1_old_commit to sha-1_new_commit included.

E.g.
$ git log --oneline 9bffbda..3c32660
3c32660 Adds last line to visiting places
cb10517 Improves list of visiting places in India
d821d77 Adds header to website

You can also view the commits in which a particular file is changed.
$ git log --oneline header.html
4b0deff Merge branch 'seo_title' into website
63105a2 Corrects title and adds punch line
185c63d Updates header to perform SEO
d821d77 Adds header to website

To view what is changed in a file from a particular commit & before that, use -p (patch) option.
$ git log --oneline -p 63105a2 header.html
63105a2 Corrects title and adds punch line
diff --git a/header.html b/header.html
index bc4e3cf..0258179 100644
--- a/header.html
+++ b/header.html
@@ -1,5 +1,6 @@
 <html>
        <body>
-               <h1>India - Heaven on Mars</h1>
+               <h1>Incredible India - Heaven on Mars</h1>
+               India offers a different aspect of her personality – exotic, extravagant, elegant, eclectic -- to each traveller to the country.
        </body>
 </html>
d821d77 Adds header to website
diff --git a/header.html b/header.html
new file mode 100644
index 0000000..bc4e3cf
--- /dev/null
+++ b/header.html
@@ -0,0 +1,5 @@
+<html>
+       <body>
+               <h1>India - Heaven on Mars</h1>
+       </body>
+</html>

To view commits between a duration use following pair or individual flags with apt values.
  • before, after or
  • since, until 
$ git log --since="2014-12-06'
$ git log --since=2.weeks --until=3.days
$ git log --after='2015-12-06'
$ git log --oneline --after='2015-12-06' --before=1.weeks

To filter commits by author -
$ git log --oneline --author='author name'

To grep commit messages,
$ git log --oneline --grep='Merge'
4b0deff Merge branch 'seo_title' into website
7aa136d Merge branch 'visiting_places' into website - 3 way
fec6334 Merge branch 'hotfix_correct_title' into website

Note - The value of grep is case sensitive. Merge and merge are different.

This is a place where a good commit message will help you. You can use BugFix to find all the commits which are related to some bug fixing process.

This takes a regex. E.g. list all the commit messages which begin with Add -
$ git log --oneline --grep='^Adds'
3c32660 Adds last line to visiting places
d821d77 Adds header to website
9bffbda Adds home page
9f76373 Adds Index file

If you are interested in stats surrounding changes in each commit,
$ git log --stat --summary --oneline
4b0deff Merge branch 'seo_title' into website
7aa136d Merge branch 'visiting_places' into website - 3 way
fec6334 Merge branch 'hotfix_correct_title' into website
3c32660 Adds last line to visiting places
 home.html | 1 +
 1 file changed, 1 insertion(+)
63105a2 Corrects title and adds punch line
 header.html | 3 ++-
......

The best option is to use -
$ git log --graph --oneline --all --decorate


To view changes in a commit,

$ git show HEAD --oneline
4b0deff Merge branch 'seo_title' into website

diff --cc header.html
index 0258179,b1635f6..bcadd56
--- a/header.html
+++ b/header.html
@@@ -1,6 -1,5 +1,6 @@@
  <html>
        <body>
-               <h1>Incredible India - Heaven on Mars</h1>
 -              <h1>India - Heaven on planet Earth</h1>
++              <h1>Incredible India - Heaven on Earth</h1>
 +              India offers a different aspect of her personality – exotic, extravagant, elegant, eclectic -- to each traveller to the country.
        </body>
  </html>

To view what has been changed in a particular file for a specific commit -
$ git show --oneline 3c32660 home.html
3c32660 Adds last line to visiting places
diff --git a/home.html b/home.html
index 26fdd05..9e0455a 100644
--- a/home.html
+++ b/home.html
@@ -9,5 +9,6 @@
                        <li>Hawa Mahal</li>
                        <li>Jantar Mantar</li>
                </ul>
+               Do visit Bengalure, Corbett National Park and Darjeeling.
        </body>
 </html>

I think this is sufficient enough to build awareness about git log, git show, it's switches and knobs.

No comments:

Post a Comment

Your comments are very much valuable for us. Thanks for giving your precious time.