如何使用 git rebase 同时编辑作者/提交者和时间戳?

问题描述 投票:0回答:1

我一直在尝试重写 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 rebase
1个回答
0
投票

根据文档

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

如果它无法识别它们,请确保您确实正在设置它们。设置和读取环境变量取决于操作系统,并且可能很棘手。

© www.soinside.com 2019 - 2024. All rights reserved.