我试图在将旧的本地仓库的git历史中删除敏感数据,然后将其推送到Github,同时保持/伪造原始的GPG签名时间戳。
我知道不建议这样更改git历史记录,但我真的需要删除这些敏感数据,同时维护GPG时间戳(即使我知道哈希值会有所不同)。
我以前可以通过以下方式做到这一点:
我会运行git rebase -i {HEAD}
(HEAD是我想要编辑的提交之前的提交),然后选择编辑所需的提交,然后运行:
sudo date -f "%s" {UNIX-TIMESTAMP}
个GIT_COMMITTER_DATE="$(date)" git commit -—amend --date="$(date)" -S
个
第一个命令是将机器的日期更改
这在过去很好用,但是现在当我尝试运行它时,所有在我想要编辑的提交之后的提交都会有一个新的GPG签名时间戳,这个时间戳与我选择用来编辑所需提交的UNIX-TIMESTAMP相同,当我将它推送到Github时,这将是可见的。
我也试过GIT_COMMITTER_DATE="$(date)" git commit -—amend --no-edit --date="$(date)" -S
,但它导致了同样的问题。
在运行git rebase —continue
之后,我该怎么做来维护后续(和未编辑的)提交的GPG时间戳?或者还有其他方法可以做到这一点吗?
1条答案
按热度按时间mec1mxoz1#
(首先,备份您的存储库!)
我不认为Git会支持在这样的操作中保留GPG时间戳。
确定你想要编辑的提交的哈希值(
Commit B
)。然后开始一个交互式的变基,从你想要编辑的提交的父提交开始。字符串
在交互式变基
todo
列表中用edit
标记你想要编辑的提交。然后用你的修改修改提交。型
继续进行变基(
git rebase --continue
)。对于随后的每次提交,将
GIT_COMMITTER_DATE
重置为原始提交日期。这可以通过脚本自动完成。您可以使用脚本来自动重置
GIT_COMMITTER_DATE
。此脚本将:GIT_COMMITTER_DATE
设置为此原始日期。git commit --amend --no-edit -S
)。型
也可以使用
git filter-branch
:型
在完成rebase并确保所有日期都正确之后,您可以将更改推送到GitHub。