我正在尝试撤消过去的不良 git 做法,并且在这样做的过程中,我想获取特定文件的提交列表,比某个时间戳更新(对这些文件的较旧提交被精心挑选到主分支,考虑到原始分支还远未完成,我现在意识到这是一个非常糟糕的主意)。图解简化:
A---A1-...-CB1--CB2-...-CBm--A5--A6 | master
\
B1--B2--B3-...-Bm-...-Bn | topic
\
B1--B2_3--B4-...-Bn | topic-R
- 提交 B1..Bm 不久前从主题分支中被精心挑选到 master 中,此处显示为 CB1、CB2 等。
- 在原始主题分支中继续处理文件(主分支未触及它们),此处为 Bm+1..Bn
- 我最近创建了 topic-R 分支作为 topic 分支的副本,并在 merge-base 之上与 master 交互地重新建立它以清理历史记录(压缩和修复)。
我现在想从 topic-R 中获取提交 Bm+1..Bn 的列表git rev-list
。所以我找到了提交 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
提交的最新时间戳——从几天前我重新设置 topic-R 分支时开始。
这里发生了什么?有没有办法告诉rev-list
通过原始时间戳进行过滤,这显然仍然可用?
我知道我可以只使用 topic-R 中的 Bm+1 的哈希来限制列表,但我很好奇 git 跟踪哪些类型的时间戳以及是否可以按原始时间戳进行过滤。