在一个分支将要发布之前,我重新组织了提交记录,导致提交记录的时间戳顺序混乱。我希望它们都是今天的,时间只间隔几秒钟。
显然,这些时间戳也不会正确,但由于这是公开的时间,我更喜欢所有提交记录在时间上都是一致的,而不是混乱的历史记录。
那么,在变基时如何告诉git创建新的时间戳?
在一个分支将要发布之前,我重新组织了提交记录,导致提交记录的时间戳顺序混乱。我希望它们都是今天的,时间只间隔几秒钟。
显然,这些时间戳也不会正确,但由于这是公开的时间,我更喜欢所有提交记录在时间上都是一致的,而不是混乱的历史记录。
那么,在变基时如何告诉git创建新的时间戳?
使用 --ignore-date 参数:
git rebase --ignore-date
--root
,可以实现这一点。 - tarsius以下是几种方法:
普通变基
git rebase --ignore-date
交互式变基
git rebase -i master
git commit --amend --date=now
git push origin <branch> -f
--amend
时都使用--date=new
。在我的看法中,在交互式变基中进行任何squash
或fixup
以及任何commit --amend
都应该自动更新时间戳为“现在”或至少是组合提交中最近日期的日期。我认为不能合理地认为组合提交应具有与组合的第一个提交相同的时间戳,就好像自那时以来什么也没有改变一样,但这就是我们今天所拥有的。 - Pablo Halpern在我的情况下,变基操作将时间戳更改为CommitDate的值,因此在gitweb中,一堆几个月前的提交显示为4天前。我找到了最后一个具有正确日期的提交并执行了以下操作:
$ git rebase --committer-date-is-author-date SHA
git rebase
的文档中可以看到:“这些标志将传递给git am
以轻松更改重新贴基的提交日期”。在git am
中它说:--committer-date-is-author-date
“[...]允许用户通过使用与作者日期相同的值来欺骗提交者日期”,而--ignore-date
“[...]允许用户通过使用与提交者日期相同的值来欺骗作者日期”。 - Enrico Campidoglio来自评论:
与
--interactive选项
不兼容
实际上...从Git 2.29(2020年第四季度)开始,它不再与之不兼容: "git rebase -i
"(man)学习了更多选项。
与以下选项兼容的选项:
--interactive
/-i
--root
!请参见commit 6160b2e(2020年8月26日)由Junio C Hamano(gitster
)提交。
请参见commit 2712669(2020年8月17日)和commit ef484ad(2020年7月13日)由Rohit Ashiwal(r1walz
)提交。
请参见commit a3894aa, commit 7573cec, commit e8cbe21(2020年8月17日)由Phillip Wood(phillipwood
)提交。
(由Junio C Hamano -- gitster
--合并于commit 9c31b19,2020年9月3日)
rebase -i
:支持--ignore-date
原始补丁来自:Rohit Ashiwal
签署者:Phillip Wood
rebase
有两种不同的后端实现——'apply
'和'merge
',每个后端都支持不同的选项。
特别是,应用后端支持一些由'git am
(man)'实现的选项,而合并后端则不支持这些选项。
这意味着可用的选项取决于使用哪个后端,这很令人困惑。
此补丁为合并后端添加了对--ignore-date
选项的支持。
此选项使用当前时间作为作者日期,而不是在重写提交时重用原始作者日期。
我们会像应用后端一样小心处理--ignore-date
和--committer-date-is-author-date
的组合。
rebase
: 添加 --reset-author-date
帮助者:Junio C Hamano
签名作者:Rohit Ashiwal
之前的提交引入了 --ignore-date
标志到 rebase -i
,但是名称相当模糊,因为它没有说明是忽略作者日期还是提交者日期。
添加一个别名以传达精确的目的。
--reset-author-date
rebase -i
: 支持 --committer-date-is-author-date原始补丁由:Rohit Ashiwal 提供
签名作者:Phillip Wood
此补丁为合并后端添加了支持 --committer-date-is-author-date
选项。
该选项使用正在重写的提交的作者日期作为创建新提交时的提交者日期。
git rebase
现在在其man page中包含:
--committer-date-is-author-date
:使用被rebase的提交的作者日期作为提交者日期,而不是使用当前时间作为提交者日期。
此选项意味着--force-rebase
。
git rebase
还在其man page中包含:
--ignore-date:
将此标志传递给'git am'以更改每个rebased提交的作者日期(请参见
git am
)。
rebase
"和"am
"子命令的"--committer-date-is-author-date
"选项错误地丢失了电子邮件地址,这在Git 2.29.1(2020年第四季度)中已得到修正。peff
)提交。gitster
--合并于commit f34687d,2020年10月26日)
am
:通过 --committer-date-is-author-date
修复破损的电子邮件签名:Jeff King
提交 e8cbe2118a (
am
: 停止导出GIT_COMMITTER_DATE,
2020-08-17) 重写了设置提交者日期的代码,使用fmt_ident()
而不是设置环境变量并让commit_tree()
处理它。
但它引入了两个错误:
- 我们使用作者电子邮件字符串而不是提交者电子邮件
- 在解析提交者标识时,我们使用了错误的变量来计算电子邮件的长度,导致其始终为零长度字符串
这个提交修复了这两个问题,使我们通过基于补丁的 "
apply
" 后端测试此选项现在成功了。
rebase
: 使用 --committer-date-is-author-date 修复破损的电子邮件报告人:VenomVendor
签署者:Jeff King
builtin/am.c
中的提交者标识解析代码。我们在之前的提交中修复了git-am
版本; 这个提交修复了复制的代码。
git rebase --root
或-i
命令与--reset-author-date
参数一起使用将会生效。请参见我的回答。 - VonC