我最近需要使用“git am”将16个补丁应用到我的repo,并且我小心地为每个补丁使用“--committer date is author date”。但是,我还需要为每个am'd补丁调整commit消息,并且——在我处理完所有16个补丁之后——我发现“commit--amend”删除了每个补丁的committer时间戳。
我终于明白我的问题可以一下子解决。

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

但在尝试解决“过滤分支”的问题之前没有,这不起作用。我很好奇我做错了什么。这是我的尝试:
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过滤器中,是否不允许将一个变量设置/导出为另一个变量的值?注意,我的方法是从一个有条件地改变了git-author-date和git-committer-date,如果$git-commit匹配一个特定的sha,但是在这种情况下,两个git-date变量都被设置为一个常量字符串,而不是另一个变量。

最佳答案

$GIT_AUTHOR_DATE的值包含空格,因此必须引用它(-0500是时区偏移量):

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

08-27 23:07