使用'git filter-branch'来纠正最近N次提交中的提交者日期?

13

最近我需要使用'git am'向我的仓库应用16个补丁,并且我小心翼翼地为每一个使用了'--committer-date-is-author-date'。但是,我还需要调整每个补丁的提交信息,并且在完成这16个补丁后,我发现'commit --amend'推高了它们每个的提交者时间戳。

最终我学到了一个方法可以一次性解决我的问题:

git rebase --committer-date-is-author-date <SHA-of-commit-prior-to-patches>

但在尝试使用'filter-branch'解决我的问题之前,未能成功。我很好奇我做错了什么。以下是我的尝试:

git filter-branch --env-filter \
    'export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE' SHA1..HEAD

这里是结果:

Rewrite 1c52265d1f06bd67e0fed1c09e1e75249424476e (1/15)/usr/lib/git-core/git-filter-branch: 1: export: -0500: bad variable name

我做错了什么?在env-filter中,我不允许设置/导出一个变量作为另一个变量的值吗?请注意,我从一种有条件地更改GIT_AUTHOR_DATE和GIT_COMMITTER_DATE的方法进行了改进,如果$GIT_COMMIT匹配特定SHA,则这两个GIT_*_DATE变量都将被设置为常量字符串,而不是另一个变量。

1个回答

21
$GIT_AUTHOR_DATE 的值包含空格,因此你需要将其用引号括起来(-0500 是你的时区偏移量):
git filter-branch --env-filter \
  'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' SHA1..HEAD

我现在明白了,谢谢。(我原以为“-0500”是git-filter-branch内部的某种错误代码。) - Cognitive Hazard
不,只是没有引号的话,你的导出语句会解析为 export GIT_COMMITTER_DATE=@1405671090 -0500(自纪元以来的秒数和时区偏移量),这是无效的 shell 语法。 - knittl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接