问题描述: 一般对于 git commit 历史进行逐一修改时都会使用如下语句
git rebase -i HEAD~n
其中 n
需要替换为数字,表示想要修改的 commit 数量,但是这样做往往导致之前给 commit 添加的签名丢失,同时 commit 修改的时间也会改成最后一次提交的时间。
解决方案: 如果想要给 commit 添加签名并且保证 commit 时间不变,可以使用如下语句
git rebase --exec 'GIT_COMMITTER_DATE="$(git log -1 --format=%at)" git commit --amend --no-edit -n -S' -i HEAD~n
简单解释一下就是,--exec
会针对到 -i
之前的每个 commit 执行一次 GIT_COMMITTER_DATE="$(git log -1 --format=%at)" git commit --amend --no-edit -n -S
语句,该语句对每个 commit 进行签名并且修改 commit date 为 author date 时间。运行上述语句后,会进入编辑器。
直接保存退出编辑器即可,随后推送修改的 commit 结果
git push -f
再次返回到 github 界面,可以发现签名和时间都恢复正常。
参考链接:
[1] git 对之前的commit 进行重新签名 Resign
[2] git 修复提交日期
[3] git rebase 修改历史提交信息