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
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.
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.
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.
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 .
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)
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