# Save this as ../change_time.py
def handle(commit):
"Reset the timezone of all commits."
date_str = commit.author_date.decode('utf-8')
[seconds, timezone] = date_str.split()
new_date = f"{seconds} +0000"
commit.author_date = new_date.encode('utf-8')
handle(commit)
# You need to be in a freshly-cleaned repo. Or use --force.
git clone <...> your_repo
cd your_repo
# First just a dry run.
git filter-repo --dry-run --commit-callback "$(cat ../change_time.py)"
# And now do it for real
git filter-repo --commit-callback "$(cat ../change_time.py)"
4条答案
按热度按时间3vpjnl9f1#
过滤器-回收
git filter-branch
已弃用。请改用git filter-repo
。您需要安装它。这里有一个关于如何使用git-filter-repo修改提交日期的excellent article,它很好地解释了
--commit-callback
的概念。∮一个非常简单的例子∮
让我们将所有提交日期的时区重置为零。
lkaoscv72#
改编自https://stackoverflow.com/a/750182/7976758:
请参见https://git-scm.com/docs/git-filter-branch以获取参考。
dauxcl2d3#
git rebase
支持--exec
选项,该选项将执行此操作。-x <cmd>
--exec <cmd>
在 最终历史记录中创建提交的每一行后面附加“exec“。将被解释为一个或多个shell命令。任何失败的命令都将中断变基,退出代码为1。
icnyk63a4#
过滤器-回收
在另一个答案中,建议将代码保存到文件. py中,并使用
git filter-repo --commit-callback "$(cat ../<your file name>.py)"
运行它,但在我的情况下,它忽略了所有空格,在python中会破坏语法。对我来说,直接将其粘贴到命令中。我使用Windows,在PowerShell上测试,初学者在这些事情上。更高级的示例
根据包含给定字符串的提交设置新的提交日期。但是注意,除非你有很好的理由,否则你不应该更改日期!
以及如何在控制台中使用: