如何正确使用`git reflog --since = ...`?

时间:2017-02-27 09:33:45

标签: git git-reflog

我有一个常规git reflog --date=iso显示大量条目的存储库,例如,请参阅此片段https://gist.github.com/FreddieChopin/0206c9ef530a056c624b065eed048c9d

正如您可能注意到的那样,2月19日,22日,23日,24日,25日和26日有点击日志。

但是如果我想将输出限制在某些日期,那么这并不像预期的那样工作。例如git reflog --date=iso --since="2017-02-20"仅提供此https://gist.github.com/FreddieChopin/fb7619dee8fde055a1cce6f6ff2f6eb6 - 它会停在" 52896f49 HEAD @ {2017-02-24 20:53:29 +0100}",即使存在reflog从那以后的2月20日。甚至有24小时的reflogs,小时数较少,所以我不知道为什么它会在那里停止。

同样的问题是我检查过的另一个存储库,所以这似乎与reflog本身有关,而不是特定的存储库。其他回购的问题更奇怪,例如git reflog --since="50.weeks"提供了我过去几天的提交,而git reflog --since="60.weeks"开始进一步回到过去 - 在那回购几年前也有定期提交。

另一方面,git log --since=...完全符合预期,所以我不确定这里的问题是什么......

1 个答案:

答案 0 :(得分:1)

请注意,Git 2.14.x / 2.15修复了reflog的一些问题 请参阅commit de23944commit d08565bcommit 7f97de5commit 7c2f08acommit f35650dcommit 82fd0f4commit 7cf686b(2017年7月7日)和{ {3}}(2017年7月9日)commit 822601e (由Jeff King (peff)合并于Junio C Hamano -- gitster --,2017年8月11日)

  

reflog-walk:apply --since / - 直到reflog日期

     

在进行reflog行走时,我们使用提交日期来进行任何日期限制。在早期版本的Git中,这可能会导致无意义的结果,因为跳过的提交会截断遍历。
  所以像这样的序列:

git commit ...
git checkout week-old-branch
git checkout -
git log -g --since=1.day.ago
  即使" git commit"" --until&#34进一步回来仍然很有趣。

     

从先前的提交开始,它使用reflog的无父遍历,你得到整个reflog减去日期与指定选项不匹配的任何提交。
  这可以说是有用的,因为您可以扫描提交的reflog   起源于一定范围。

     

但是,执行reflog walk的用户更希望根据reflog条目本身进行限制   您可以使用以下代码模拟git log -g @{1.day.ago}

# show me reflog entries from the past day
git log -g --since=1.day.ago
  

但是没有办法让Git只能回到a   某个约会。 E.g:

if (!file_exists( 'example.db')) {
    throw new Exception('No database file');
}
  

这个补丁教导修改机制更喜欢   reflog输入日期为执行reflog时的提交日期   行走。
  从技术上讲,这是影响行为的变化   管道,但以前的行为是如此的错误,以至于它   不太可能有人依赖它。

A commit 3ab01ac