变基后 git 提交的时间戳?

Timestamps on git commits after rebase?

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

A---A1-...-CB1--CB2-...-CBm--A5--A6 | master
 \
  B1--B2--B3-...-Bm-...-Bn          | topic
 \
  B1--B2_3--B4-...-Bn                | topic-R

我现在想从主题-R git rev-list 中获取提交 Bm+1..Bn 的列表。所以我找到了提交 CBm,并且在 topic-R 的历史记录(和 rev-list 输出)中它显示了我期望的日期,大约 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 时,我在列表中的 所有 提交上看到了最近的时间戳 - 从我仅仅重新定位主题-R 分支开始几天前。

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

我知道我可以只使用主题-R 中的 Bm+1 哈希来限制列表,但我很好奇 git 跟踪的是哪种时间戳,以及是否按原始时间戳过滤可能。

每个提交都有 两个 日期和时间戳。一种叫做作者日期,一种叫做提交者日期

当您以通常的方式进行新提交时,使用 git commit 并且没有任何技巧,两者都设置为 相同的值 。 Git 从您的计算机时钟中检索当前时间,如果准确,则新提交的两个日期戳为“现在”。

当您使用 git cherry-pick 或内部使用 cherry-pick 机制(例如 git rebase)进行提交时,Git 通常会保留 原始提交的作者,以及原作者日期。您成为提交者,“现在”是提交者日期。

要使用 git log 查看 两个 时间戳,请使用可同时显示两者的任何格式设置选项。使用最简单的是git log --pretty=fuller.

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