Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git rebase--提交者日期是作者日期--根目录不起作用_Git_Date_Commit_Rebase_Author - Fatal编程技术网

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