问题描述: 一般对于 git commit 历史进行逐一修改时都会使用如下语句

git rebase -i HEAD~n

其中 n 需要替换为数字,表示想要修改的 commit 数量,但是这样做往往导致之前给 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 界面,可以发现签名和时间都恢复正常。

commit 历史恢复正常


参考链接:
[1] git 对之前的commit 进行重新签名 Resign
[2] git 修复提交日期
[3] git rebase 修改历史提交信息

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐