You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Git提交作者邮箱并保留原始提交时间戳?

修改Git提交作者邮箱并保留原始时间戳的正确方法

我来帮你搞定这个问题!你之前的思路方向是对的,但需要调整命令参数的组合——问题出在git commit --amend默认会更新提交的时间戳,我们需要明确告诉Git保留原始的提交时间信息。

第一步:确认本地Git配置正确

首先确保你的本地仓库已经配置好了新的邮箱和用户名,这样--reset-author才会用正确的信息替换旧邮箱:

git config user.name "你的GitHub用户名"
git config user.email "newemail@gmail.com"

第二步:执行带时间保留的批量修改命令

用下面这个命令重写整个提交历史,修改作者邮箱的同时完全保留原始提交时间:

git rebase -r --root --exec 'git commit --amend --no-edit --reset-author --date="$(git show --format=%ai HEAD)"'

命令细节解释:

  • --root:从仓库的第一个提交开始,处理所有历史提交
  • --exec:对每个提交依次执行后面的修改命令
  • --date="$(git show --format=%ai HEAD)":获取当前提交的原始作者时间,强制git commit --amend使用这个时间,而不是当前系统时间
  • --reset-author:用当前Git配置的用户名和邮箱,替换原提交的作者信息

第三步:验证修改结果

执行完命令后,用下面的命令查看提交历史,确认作者邮箱已经更新,且时间戳保持原始状态:

git log --pretty=format:"%h %an <%ae> %ad"

你会看到所有提交的邮箱都变成了newemail@gmail.com,而时间和原来的提交时间完全一致。

第四步:推送到GitHub

因为我们修改了提交历史,需要用强制推送覆盖远程仓库的历史(仅在测试仓库操作,避免影响协作仓库):

git push --force-with-lease

--force-with-lease是比--force更安全的强制推送方式,它会检查远程仓库的状态,避免意外覆盖其他人的提交。

额外说明(可选)

如果你希望连提交者时间(committed date)也完全保留原始值,而不是更新为当前时间,可以用下面这个稍复杂的命令:

git rebase -r --root --exec 'git commit --amend --no-edit --reset-author --date="$(git show --format=%ai HEAD)" && GIT_COMMITTER_DATE="$(git show --format=%ci HEAD)" git commit --amend --no-edit'

不过一般情况下,GitHub界面展示的主要是作者时间,第一个命令已经能满足你的核心需求。

内容的提问来源于stack exchange,提问作者antoninhrlt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:40:18