重新基准后git提交的时间戳



我正试图消除过去的错误git做法,在这样做的过程中,我想获得一份对特定文件的提交列表,这些文件比某个时间戳更新(对这些文件的旧提交被精心挑选到主分支,我现在意识到这是一个非常糟糕的想法,考虑到原始分支远未完成(。图示简化:

A---A1-...-CB1--CB2-...-CBm--A5--A6 | master

B1--B2--B3-...-Bm-...-Bn          | topic

B1--B2_3--B4-...-Bn                | topic-R
  • 委员会B1..Bm是一段时间前从主题分支中挑选出来的,如CB1、CB2等
  • 在原始主题分支中继续对文件进行处理(主分支没有触及它们(,此处为Bm+1..Bn
  • 我最近创建了topic-R分支作为主题分支的副本,并以交互方式将其重新建立在与master合并的基础之上,以清理历史记录(压缩和修复(

我现在想从带有git rev-list的topic-R中获得一个提交Bm+1..Bn的列表。所以我找到了提交CBm,在topic-R的历史记录(和版本列表输出(中,它显示了我预期的日期,大约9个月前。

git rev-list --after "2020-08-07" <A>..topic-R --reverse -- <file list>

所以我把它提供给rev-list,令人惊讶的是,我得到了所有的提交,就好像--after/--since过滤器被忽略了一样。将--pretty传递给rev-list仍然显示date下的预期日期,这是几个月前编写代码时的日期。但是,当我将--timestamp传递给rev-list时,我会在列表中所有提交的上看到最近的时间戳,这是我几天前重新设置topic-R分支的基础时的时间戳。

这是怎么回事?有没有办法告诉rev-list按照原始时间戳进行过滤,这显然仍然可用?

我知道我可以使用topic-R中的Bm+1的哈希来限制列表,但我很好奇git跟踪了什么类型的时间戳,以及是否可以按原始时间戳进行过滤。

每个提交都有两个日期和时间戳。一个被称为作者日期,另一个被称作

提交人日期当您以通常的方式使用git commit而不使用欺骗进行新提交时,两者都设置为相同的值。Git从你的计算机时钟中检索当前时间,如果这是准确的,那么新提交的两个日期戳是"0";现在";。

当您使用git cherry-pick或内部使用樱桃采摘机制的东西(如git rebase(进行提交时,Git通常会保留提交的原始作者和原始作者日期。你成为了提交人;现在";是提交日期。

要查看带有git log两个时间戳,请使用打印这两个时间戳的任何格式选项。使用最简单的是git log --pretty=fuller

git log--since--until(或--after--before(选项仅使用提交器日期。(我认为应该有一种方法来指定作者的日期,但没有。(

最新更新