Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does git log --since count?

Tags:

git

git-log

I have a simple test repository with just several commits and want to see the date&time filtered log:

 $ git log --author="automatix" --since="2013-01-30" --pretty -- test commit ea0719bef142659fa561c9d040b2120012ed0184 Date:   Thu Jan 31 02:03:12 2013 +0100  commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Date:   Thu Jan 31 01:59:11 2013 +0100  commit a0b027beba2cd03571bb9475b9db9542f8efe990 Date:   Thu Jan 31 01:50:38 2013 +0100  commit add77c8fe2ba9254c11b98e14facede3420dc51c Date:   Thu Jan 31 01:48:34 2013 +0100  commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f Date:   Thu Jan 31 01:46:27 2013 +0100  commit 8c286391e54d3fc1e210950b1320fd6f013a8f84 Date:   Thu Jan 31 01:41:27 2013 +0100  commit 9c880595e57f717383796fa2940f41f0f42f7e2a Date:   Thu Jan 31 01:38:17 2013 +0100  commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db Date:   Thu Jan 31 01:30:00 2013 +0100 

The first selected commit is a95527f36a533e1ecba1aadceea31a9dcbe1a8db from 2013-01-30 01:30:00. 8 commits are selected:

 $ git log --author="automatix" --since="2013-01-30" --format=oneline -- test | wc       8      34     498 

OK. Now I select since 2013-01-31:

 $ git log --author="automatix" --since="2013-01-31" --format=oneline -- test | wc       0       0       0 

What? Ok, that should mean, that the since rule excludes the commits of the startdate. Right?

But let's go on:

$ git log --author="automatix" --since="2013-01-31 01:30:00" --pretty -- test commit ea0719bef142659fa561c9d040b2120012ed0184 Date:   Thu Jan 31 02:03:12 2013 +0100  commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Date:   Thu Jan 31 01:59:11 2013 +0100  commit a0b027beba2cd03571bb9475b9db9542f8efe990 Date:   Thu Jan 31 01:50:38 2013 +0100  commit add77c8fe2ba9254c11b98e14facede3420dc51c Date:   Thu Jan 31 01:48:34 2013 +0100  commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f Date:   Thu Jan 31 01:46:27 2013 +0100  commit 8c286391e54d3fc1e210950b1320fd6f013a8f84 Date:   Thu Jan 31 01:41:27 2013 +0100  commit 9c880595e57f717383796fa2940f41f0f42f7e2a Date:   Thu Jan 31 01:38:17 2013 +0100  commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db Date:   Thu Jan 31 01:30:00 2013 +0100 
$ git log --author="automatix" --since="2013-01-31 01:30:00" --format=oneline -- test | wc       8      34     498 

Now, when I'm writing the starttime as well, the commits of the starttime are included .

I don't understand the logic. Can anybody explain, why it works so strange?

Thanks

like image 710
automatix Avatar asked Jan 31 '13 03:01

automatix


People also ask

How does git log follow work?

With git log --follow , Git runs an after-diff step (called from diff_tree_sha1 ; see footnotes) that trims everything down to one file. The diff is done with R=C and L=P.

Is git log in chronological order?

The most basic and powerful tool to do this is the git log command. By default, with no arguments, git log lists the commits made in that repository in reverse chronological order; that is, the most recent commits show up first.

How does git track history?

Git stores history as a graph of snapshots of the entire repository. These snapshots, called commits in Git, can have multiple parents, creating a history that looks like a graph instead of a straight line.

What is the command to check the count of logs in git?

git shortlog | grep -E '^[ ]+\w+' | wc -l if you want to get total number and git shortlog | grep -E '^[^ ]' if you want to get commits number for every contributor. Thanks for pointing out wc -l .


1 Answers

In case it helps someone else who lands here like I did, after a bit of researching I found out that using ISO8601 format also works:

git log --since="2014-02-12T16:36:00-07:00" 

This will give you precision down to the second. Note: you can also use:

git log --after="2014-02-12T16:36:00-07:00" git log --before="2014-02-12T16:36:00-07:00" git log --since="1 month ago" git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago" 

etc.

Of course, this doesn't "explain why it works so strange." However, it certainly solved the problem for me.


EDIT:

After a bit more research, I found out "why it works so strangely":
It turns out that when you don't specify a date format, git log defaults to either the author's timezone or commit dates, meaning for consistent behavior, it's useful to explicitly declare your date format with something like:

git log --date=local 

Lastly, when you don't specify a time, it defaults to your local time when you ran the command.

Long story short, being specific should solve the problem:

git log --date=local --after="2014-02-12T16:36:00-07:00" 

Also, you can set the default date format permanently with the following command:

git config log.date local 

you can use any one of these values: (relative|local|default|iso|rfc|short|raw)

like image 129
gMale Avatar answered Sep 30 '22 03:09

gMale