如何给历史的 git commit 添加签名并保留修改时间

本文介绍了如何在Git中使用`gitrebase--exec`来修正commit历史,保持签名完整且commit时间不变,避免因`gitrebase-i`导致的签名丢失和时间修改。操作包括设置`GIT_COMMITTER_DATE`、使用`gitcommit--amend`以及最终的`gitpush-f`。

问题描述: 一般对于 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 修改历史提交信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值