git rebase--提交者日期是作者日期--根目录不起作用
我尝试将最近提交的提交人日期设置为其作者日期。这通常适用于git rebase--提交者日期是作者日期--根目录不起作用,git,date,commit,rebase,author,Git,Date,Commit,Rebase,Author,我尝试将最近提交的提交人日期设置为其作者日期。这通常适用于git-rebase——提交者日期是作者日期头~1。不幸的是,只有一个提交,这意味着我必须使用--root而不是HEAD~1,但是git rebase--committer date是author date--root出于某种原因没有将提交者日期设置为author date。我能做什么?坏消息 不幸的是,git-rebase--root使用交互式rebase代码(因为非交互式代码不能“重放”根提交),而--committer-date是a
git-rebase——提交者日期是作者日期头~1
。不幸的是,只有一个提交,这意味着我必须使用--root
而不是HEAD~1
,但是git rebase--committer date是author date--root
出于某种原因没有将提交者日期设置为author date。我能做什么?坏消息
不幸的是,git-rebase--root
使用交互式rebase代码(因为非交互式代码不能“重放”根提交),而--committer-date是author-date
实际上是传递给git-am
的标志,它实现了简单的非交互式案例
好消息
基本上,git-rebase
所做的是复制一些提交(通常在复制过程中进行某种更改),然后将分支名称指向最终复制的提交。如果复制时只需要更改一个提交,则可以使用git commit--amend
而不是git rebase
。1如果整个存储库中只有一个提交,则复制时只能更改一个提交,因此本例适用
您需要使用GIT\u committer\u date
变量将提交时间戳设置为任意值,而不是--提交者日期是作者日期。您还可以使用--author
和/或--date
覆盖作者姓名和/或时间戳。因此:
t='2017-09-01 12:34:56'
GIT_COMMITTER_DATE="$t" git commit --amend --date="$t"
将两个时间戳设置为2017年9月1日12:34:56。(我在这里使用shell变量t
,以避免在同一时间戳中键入两次。)
(如果您不想编辑提交消息,请添加--不编辑。请记住,新提交将使用索引中当前的内容!如果您在提取头提交后更改了索引,则可能需要先将头提交复制到临时索引,然后使用该索引。)
1此操作假设您要进行的更改是,例如,提交消息文本或日期或作者或其他类似内容,而不是提交的父ID。根提交的定义是没有父ID的,并且git commit--amend
将继续没有父ID,这是您在本例中所需要的
但是由于某种原因,git-rebase--committer-date是author-date--root
没有将committer-date设置为author-date
实际上,从Git 23.19(2018年第3季度)开始,它可能会设置正确
当我们开始将命令从shell脚本中移出时,创建的“author script
”文件“git-rebase-i
”已损坏,现在正在修复
参见,,(2018年7月31日)作者。
(于2018年8月17日合并)
sequencer
:修复“rebase-i--root
”损坏作者头时间戳
当“git rebase-i--root
”创建新的根提交时,它会破坏
“作者
”标题的时间戳,方法是在“@
”前面加上前缀:
author A U Thor@1112912773-0700
提交解析器对“author
”头的格式要求非常严格,并且不允许在该位置使用“@
”
“@
”来自“rebase merge/AUTHOR script
”中的GIT\u AUTHOR\u DATE
”,
但是,read_author_ident()
表示基于Unix历元的时间戳时,错误地允许它滑入提交的“author
”头中,从而损坏它
一种可能的修复方法是在构造时过滤掉“@
”
然而,“author
”标题时间戳更正确的修复方法是解析
GIT_AUTHOR_DATE
DATE(通过parse_DATE()
)并格式化解析结果
进入“作者
”标题。
由于用户可以编辑“rebase merge/author script
”,因此这种方法还有额外的好处,可以捕获由于手动编辑而导致的其他潜在时间戳损坏
我们可以做得比自己调用parse_date()
并构造
但是,可以手动使用“author
”标题,而不是利用
fmt_ident()
这对我们有用
“TL;DR只需给我一个有效的命令行”版本:
git filter branch--env filter'export git\u COMMITTER\u DATE=“$git\u AUTHOR\u DATE”
FYI:--amend--no edit--DATE=“…”
听起来像是一个用例,通常缩写为-C sha
,其中sha指向一个提交id,我们希望从该id获取作者日期、作者电子邮件和提交消息。。不幸的是,-C
没有触及“提交人”部分,因此该部分仍然需要env变量。请使用git 2.19(2018年第3季度)重试您的git rebase--提交人日期是作者日期--root
:现在应该可以了。请参阅。git-rebase--committer-date为author-date--root
打印一个:fatal:无法将am选项与交互或合并选项组合(git版本2.21.0.windows.1)。尽管如此,@40detectives奇怪:它仅在与--on
结合使用时才与--root
不兼容,但它不会对提交进行签名。当运行git commit--amend--no edit-n-S
时,如何修改它以添加GPG签名?
author A U Thor <author@example.com> @1112912773 -0700