变基后 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
- 提交 B1..Bm 是前段时间从主题分支中挑选出来的 master,此处显示为 CB1、CB2 等
- 在原始主题分支中继续处理文件(master 分支没有触及它们),此处为 Bm+1..Bn
- 我最近创建了 topic-R 分支作为 topic 分支的副本,并以交互方式在 merge-base 之上与 master 重新建立基础以清理历史记录(压缩和修复)。
我现在想从主题-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
使用 提交者 只有日期。 (我认为应该有一种方法来指定作者日期,但没有。)
我正在尝试撤消我过去的不良 git 做法,在这样做的过程中,我想获得对特定文件的提交列表,这些文件比某个时间戳更新(对这些文件的旧提交被精心挑选到 master 分支,我现在意识到这是一个 非常糟糕的 想法,考虑到原始分支远未完成)。图文并茂:
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 等
- 在原始主题分支中继续处理文件(master 分支没有触及它们),此处为 Bm+1..Bn
- 我最近创建了 topic-R 分支作为 topic 分支的副本,并以交互方式在 merge-base 之上与 master 重新建立基础以清理历史记录(压缩和修复)。
我现在想从主题-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
使用 提交者 只有日期。 (我认为应该有一种方法来指定作者日期,但没有。)