本地修改提交日期后,GitHub显示rebase时间而非修改日期求助
提交日期显示异常的解决办法
我用rebase修改了提交的日期,本地显示正常,但删除远程仓库重新推送后,所有经rebase处理的提交,显示的都是rebase操作的时间,而非我修改后的日期。
问题根源
Git每个提交有两个关键日期:
- 作者日期(AuthorDate):你修改的那个正确日期,记录提交最初创建的时间
- 提交日期(CommitDate):rebase操作时自动生成的新时间,记录提交被重新应用的时间
远程仓库默认展示的是提交日期,所以才会出现你看到的情况。
解决步骤
1. 先确认本地提交的日期详情
执行命令查看两个日期的具体值:
git log --pretty=fuller
输出里能清楚看到AuthorDate和CommitDate的区别。
2. 同时修改两个日期
要让远程显示正确日期,必须在修改时同步更新作者日期和提交日期,推荐两种方式:
方式一:交互式rebase逐个修改
- 启动交互式rebase,指定要修改的最近N个提交:
git rebase -i HEAD~N
- 在弹出的编辑界面,把需要修改的提交行开头的
pick改成edit,保存退出。 - 进入单个提交的编辑状态后,执行以下命令替换日期(把
YYYY-MM-DD HH:MM:SS换成你要的时间):
GIT_COMMITTER_DATE="YYYY-MM-DD HH:MM:SS" git commit --amend --no-edit --date="YYYY-MM-DD HH:MM:SS"
- 执行完后继续rebase:
git rebase --continue
重复3、4步直到所有目标提交修改完成。
方式二:批量修改提交日期
如果要一次性修改一段范围内的提交,用filter-branch脚本(替换YYYY-MM-DD HH:MM:SS和N为实际值):
git filter-branch --env-filter ' export GIT_COMMITTER_DATE="YYYY-MM-DD HH:MM:SS" export GIT_AUTHOR_DATE="YYYY-MM-DD HH:MM:SS" ' HEAD~N..HEAD
⚠️ 注意:这个命令会完全重写提交历史,执行前务必确保本地没有未保存的改动。
3. 强制推送至远程
修改完成后,强制推送到远程仓库(因为历史已被重写):
git push -f origin master
验证
推送完成后查看远程仓库的提交历史,就能看到设置的正确日期了。
内容的提问来源于stack exchange,提问作者Mohammed Sharaf Eddeen
相关产品推荐
相关产品推荐

