Robert Dailey <rcdailey.lists@xxxxxxxxx> writes: > I was surprised to find today that the following didn't work as expected: > > $ git show master@{"1 year ago"}:Path/To/File.h > > It gave me the following warning which did not make the problem obvious at all: > warning: Log for 'master' only goes back to Mon, 8 Sep 2014 12:08:44 -0500. > > What it is trying to tell me (and I only found this out after a lot of > poking and prodding around Google) is that I can't refer to a commit > by date if it extends beyond the range of the reflog. > > I don't understand why this requirement is in place. Each commit has a > time stamp, so in theory it should be possible to calculate an > absolute date from the duration specified in the refspec and grab the > commit from `git log` from that. The reason is because the dates on the commit object itself do not have anything to do with the question you are asking with the "@{date}" notation. master@{at-this-time} notation specifies the commit that was at the tip of your master branch at the specified time, and that information can _only_ come from your own reflogs. If you did this in your copy of git.git repository today: $ git checkout -b test e83c5163316f89bfbd $ sleep 3600 $ git reset --hard master $ git show test@{20.minutes.ago} you will see e83c516, even though that commit is almost 10 years old. Now what was at the tip of your "test" branch on April 7th, 2005? The answer is "nothing", as most likely your 'test' branch did not exist back then. And that is why "git show test@{2005/04/07}" will not (and should not) look at the timestamps in commit objects. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html