滴水可以汇成江河,粒米可以聚成谷仓。——萨迪

当你需要修改 Git 提交的时间,可以根据不同的场景采用不同的方法。下面按场景分类详细介绍各种情况的操作步骤。

在未推送之前修改提交时间

修改最近一次提交的时间

如果你的提交还没有被推送到远程仓库,修改最近一次提交的时间相对简单:

1
git commit --amend --no-edit --date="2024-05-04T01:49:20"

这个命令会更新最后一次提交的时间,而不更改提交信息。

修改未提交的更改

如果你有更改尚未提交,需要先进行提交。可以先正常提交,然后立即修改这个新提交的时间:

1
2
git commit -m "Your commit message"
git commit --amend --no-edit --date="2024-05-04T01:49:20"

已推送到远程仓库后修改提交时间

修改最近一次已推送的提交

如果修改的是已经推送到远程的最近一次提交,你需要小心操作,因为这会改变提交的哈希值。操作步骤如下:

1
2
git commit --amend --no-edit --date="2024-05-04T01:49:20"
git push --force

这个操作会强制覆盖远程仓库的历史,可能会影响其他协作者。在执行之前应当确保所有团队成员都被通知。

修改具体某一次或某几次的提交时间

修改历史中特定的某一次提交

要修改历史中某一次具体的提交,你需要使用交互式 rebase:

1
2
3
git rebase -i 提交哈希值^
# 例
git rebase -i a1b2c3d^

在编辑器中将要修改的提交前的 pick 改为 edit,保存退出。然后:

1
2
git commit --amend --date="2024-05-04T01:49:20"
git rebase --continue

修改历史中连续几次提交的时间

如果需要修改一系列的提交,可以扩展上面的方法,选定更早的起点进行 rebase:

1
git rebase -i HEAD~n  # n 是从最近的提交向回的提交数量

在编辑器中,对需要修改的每一次提交都选择 edit,然后按上述步骤逐一修改每次提交的日期。

注意事项

  • 修改提交历史尤其是已经推送到远程的历史会改变提交的哈希值,这会影响到所有基于这些哈希值的操作和引用。
  • 在团队协作环境中修改已推送的提交历史需要特别小心,因为这可能导致其他团队成员的仓库出现问题。务必与团队沟通并确认大家都准备好处理可能发生的冲突。
  • 在执行任何修改历史的操作之前,备份你的仓库是一个好习惯。这样可以在操作不成功时快速恢复到原始状态。