我一直在尝试重写 Git 存储库的历史记录,以整合提交、删除大文件和许多其他更改。
git filter-branch
不推荐作为工具,我想要手动重写历史的精度。
我遇到了一个重大障碍。当我重写提交时,重写的提交显示为由我提交(作者创作且我提交),这是我不想要的。
在选择 rebase 中的每个提交之前,我可以通过运行
git config user.name
和 git config user.email
来解决这个问题。这使得它看起来像是原作者犯下的。
到目前为止一切顺利,但是当我这样做时,提交者时间戳总是“现在”。我可以使用
git commit --amend --date
更改作者时间戳,但提交者时间戳是不可更改的。
我可以使用选项
--committer-date-is-author-date
,并且它可以工作(尽管它改变了时区,我不喜欢)......但似乎没有使用交互式变基,它什么也不做。自动变基不允许我使用 git config user.name/email
让提交的原作者自己出现。
我尝试使用
set GIT_COMMITTER_DATE=
,然后使用git commit --amend --no-edit
。一开始还能用,但后来不知什么原因突然停止了。它现在什么也不做 - 提交者时间戳不受影响。
这让我可以选择让我作为提交者添加到提交中,或者在具有多年历史的项目中使用不准确的“现在”时间戳。
我正在寻找一种方法,以便查看历史记录的人们可以看到原始作者和原始时间戳(或我指定的任何时间戳),并且这与交互式变基兼容,因为我将要做很多事情变基,因此整个历史将被重写,从过去越来越远。
是的,这可能是一个疯狂的项目,但是有人对如何实现这个有任何建议吗?
(是的,我正在一个单独的分支上执行此操作。完成项目后我将强制推送到主分支。)
根据文档
git commit
识别以下环境变量
GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
GIT_COMMITTER_DATE
它们的值优先于配置值。
因此,在您的情况下,您需要设置
GIT_COMMITTER_*
变量。
您可以使用命令检查
git
是否识别变量
git var GIT_COMMITTER_IDENT
如果它无法识别它们,请确保您确实正在设置它们。设置和读取环境变量取决于操作系统,并且可能很棘手。