我不小心使用了不同的GPG密钥、电子邮件、姓名等,在本地未推送的Git存储库中进行了几次提交(约20次)。如何重新签署/重新授权所有提交?
如果可以重新签署所有提交,那么这个答案就可以了,因为所有提交都是由我授权的,但是也可以提供一个可以针对特定作者的解决方案。
Bash脚本可以工作,但是我现在正在使用Windows。我必须打开WSL并从那里运行bash脚本。如果能够使用PowerShell完成,那就更好了,因为它是跨平台的。如果能够在单个Git命令中完成,那就更加优秀。谢谢。
我不小心使用了不同的GPG密钥、电子邮件、姓名等,在本地未推送的Git存储库中进行了几次提交(约20次)。如何重新签署/重新授权所有提交?
如果可以重新签署所有提交,那么这个答案就可以了,因为所有提交都是由我授权的,但是也可以提供一个可以针对特定作者的解决方案。
Bash脚本可以工作,但是我现在正在使用Windows。我必须打开WSL并从那里运行bash脚本。如果能够使用PowerShell完成,那就更好了,因为它是跨平台的。如果能够在单个Git命令中完成,那就更加优秀。谢谢。
git filter-repo
,它替换了旧的过时的git filter-branch
或BFG。
它带有基于用户和电子邮件的筛选功能,并且只需一行命令即可运行。git filter-repo --mailmap my-mailmap
使用 my-mailmap
:
Correct Name <correct@email.com> <old@email.com>
git filter-branch
并指定尚未推送的提交范围 (@{u}..@
),这样不会改变整个历史记录。如果我想要更简单快速一些(尤其是因为filter-branch
相当复杂),我会对提交范围运行交互式变基,将pick
替换为edit
,然后运行git commit --amend --reset-author --no-edit && git rebase --continue
直到变基完成。 - terrorrussia-keeps-killing-x
选项:git rebase -i ... -x "git commit --amend --reset-author --no-edit"
。 - LeGEC--interactive
总是需要一个 TODO 序列,因此不能通过命令行指定序列。现在我知道-x
完美地适用于这种情况,因此即使没有-i
也没关系。很高兴每天都能学到 Git 的新东西。感谢您的建议! - terrorrussia-keeps-killing