如何将一个分支中所有提交的日期更改为当前时间?

3
在某些情况下,我可能希望掩盖工作完成的确切日期和时间,并且想要重置一组工作的日期,而不会丢失整个提交历史记录。
如何重新编写所有提交的日期?
1个回答

2

我稍微查看了一下,没有找到确切回答这个问题的内容。最简单的解决方案似乎是:

git filter-branch -f --env-filter 'GIT_COMMITTER_DATE="`date`"; GIT_AUTHOR_DATE="`date`"'
git push -f origin master

1
如果您在一次操作中设置两个变量,速度会快得多(快两倍):git filter-branch --env-filter 'tmp=$(date); GIT_AUTHOR_DATE=$tmp GIT_COMMITTER_DATE=$tmp',例如(未经测试)。请注意,这将过滤当前分支可达的所有提交,这可能包括从其他分支可达的提交。 - torek
我稍后会进行另一次迭代。我的用例只是为了完全过滤主分支,因此来自其他分支的提交的可达性并不是我关心的问题。 - Alper
单次运行确实更加方便。现在如果我知道为什么需要使用-f备份覆盖,那就好了... - Alper
只有当存在 refs/original/ 时,才需要 -f。它告诉 git filter-branch 继续清除现有的 refs/original/ 命名空间。 - torek
是的,但第一次运行它时它不存在,现在它存在了。我对我的git-refs不是很熟悉。 - Alper
任何filter-branch的最后一步是将现有的ref值(就像通过git update-ref)替换为映射到复制提交中的哈希值。但是,它不依赖于reflogs来保存其先前的值,而是将原始值保存在refs/original/中,以便refs/heads/master变成refs/original/refs/heads/master。因此,在第一个过滤器之后,无论是否使用-f,您最终都会得到一个填充的refs/original/名称空间。当您对结果感到满意时,您应该手动删除这些内容。 - torek

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