git-提交时间和作者时间的区别
1.介绍
定义介绍
提交时间(Committer Date):决定了提交在 Git 历史中的位置,通常影响 GitHub 上提交显示的顺序。
作者时间(Author Date):虽然不影响提交的排序,但在每个提交详情页面上可以看到这个时间,它代表的是原始提交的时间。
使用场景
本地或者远程服务器是根据提交时间进行排序显示提交记录的先后顺序,这也是符合我们常识的;而作者时间不参与排序,只作为显示列。因此我们本地看到的时间并不是提交时间,而是作者时间。这个后面验证。
发生时机
当我们正常执行git commit时,提交时间和作者时间时一致的
当我们执行git commit --ammend时,当前的提交记录会覆盖上次本地未push的提交记录,此时提交时间和作者时间就不一致了
2.查看提交记录的提交时间和作者时间
提交记录时间线如图
这里的test提交记录是本地已提交但未push的记录,我们以此记录进行测试和验证,该记录的commitID为581118dd
查看时间命令
git show 581118dd --format=fuller
可以看到提交时间和作者时间是一致的,现在我们使用git commit --ammend重新提交一次记录,记录备注信息为 test2.
此时commitId也发生了变化。
查看带–ammend重新提交后的提交时间和作者时间,执行命令
git show 2c8c9163 --format=fuller
当前2c8c9163相比581118dd只改变了提交时间,但并修改作者时间。
修改当前2c8c9163记录的作者时间,因为次提交记录的时间是2025/02/07,我们修改为2025/02/06
执行命令
git commit --amend --no-edit --date "2025-02-06 00:00:00"
查看作者时间是否改变:
git show 770fc30c--format=fuller
可见,改变的确实作者时间,我们看一下本地开发工具显示效果。
提交记录确实被修改为了770fc30c,时间被修改为了 2025/02/06,但是提交记录并未按照显示的时间进行排序,因此我们验证
1.提交记录并未按照作者时间进行排序,而是根据提交时间排序
2.本地开发工具显示的时间并不是提交时间,而是作者时间。
3.拓展
修改提交时间
此命令只修改提交时间,并不会修改作者时间。
GIT_COMMITTER_DATE="YYYY-MM-DD HH:MM:SS" git commit --amend --no-edit
将 “YYYY-MM-DD HH:MM:SS” 替换为你希望设定的新日期和时间。
更新提交时间
此命令不会修改作者时间,只会讲提交时间设置为当前时间。
GIT_AUTHOR_DATE="YYYY-MM-DD HH:MM:SS" git commit --amend --no-edit
将 “YYYY-MM-DD HH:MM:SS” 替换为你希望设定的新日期和时间。
修改作者时间并更新提交时间
此命令会修改作者时间,并且会更新提交时间为当前时间。
git commit --amend --no-edit --date="YYYY-MM-DD HH:MM:SS"
将 “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"
将 “YYYY-MM-DD HH:MM:SS” 替换为你希望设定的新日期和时间。
修改指定提交记录的作者时间
1.线修改系统默认文本编辑器
这里以linux为例,设置vim为默认文本编辑器
git config --global core.editor "vim"
2.编启动交互式 rebase
使用以下命令开始一个交互式的 rebase 过程,从你想修改的提交点开始。假设你知道想修改的提交是从当前分支起点算起的第n个提交,那么可以运行:
git rebase -i HEAD~n
这里执行的最新三条记录
git rebase -i HEAD~3
改动后
按照vim操作命令保存退出
如果你知道具体的提交哈希值,也可以基于该提交进行rebase:
git rebase -i <commit-hash>^
注意这里的 是目标提交的前一个提交的哈希值。
3.标记提交为 edit:在打开的文本编辑器中,将你想修改作者时间的那行前面的单词 pick 改为 edit,然后保存并关闭编辑器。这会告诉 Git 在这个提交处暂停,允许你进行修改。
设置作者时间并 amend 提交:Git 会暂停在这个提交上,这时你可以设置新的作者时间,并使用 --amend 选项来更新提交:
GIT_AUTHOR_DATE="YYYY-MM-DD HH:MM:SS" git commit --amend --no-edit
将 “YYYY-MM-DD HH:MM:SS” 替换为你希望设定的新日期和时间。
这里我们使用
git commit --amend --no-edit --date "2029-06-06 06:06:06"
5.继续 rebase 过程:完成修改后,使用以下命令继续 rebase:
git rebase --continue
6.解决冲突(如果存在):如果在 rebase 过程中有任何冲突,请解决这些冲突,并使用 git add . 标记冲突已解决,然后再次运行 git rebase --continue 直到 rebase 完成。
查看效果