如何移除Git未验证提交记录上的unverified标签?
批量处理Git提交unverified标识的可行方案
GitHub的unverified标识并非可以直接删除的附加标签,是平台基于提交的作者/提交者邮箱匹配性、GPG签名有效性自动生成的状态标识,你需要修正提交本身的对应字段,平台会自动移除该标识。
场景1:未开启强制提交签名,因邮箱不匹配导致unverified
如果你的GitHub账号没有开启Vigilant签名校验模式,绝大多数unverified标识都是因为提交关联的邮箱没有在你的GitHub账号下完成验证,只需批量修正历史提交的作者、提交者邮箱即可解决:
- 首先克隆仓库的裸版本到本地,避免操作工作区产生异常:
git clone --bare https://github.com/你的用户名/你的仓库名.gitcd 你的仓库名.git - 复制下方脚本,替换参数后执行:
#!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="出现问题的旧邮箱地址" CORRECT_NAME="你的GitHub用户名" CORRECT_EMAIL="你的GitHub已验证邮箱" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
- 确认提交信息修改无误后,强制推送到远程仓库:
git push --force --tags origin 'refs/heads/*' - 操作完成后删除本地裸仓库即可,GitHub会在几分钟内刷新提交状态,自动清除unverified标识。
场景2:开启了Vigilant模式,需GPG签名才会显示verified
如果你开启了GitHub的签名校验要求,需要给所有历史提交批量补有效GPG签名:
- 提前确认本地已经配置好GPG密钥,公钥已上传到GitHub,且已经通过
git config user.signingkey配置好签名密钥ID - 执行命令批量重签所有历史提交:
git filter-branch --commit-filter 'git commit-tree -S "$@"' HEAD - 如果只需要重签最近的N个提交,比如最近10个,可以使用更轻量化的变基命令:
git rebase --exec 'git commit --amend --no-edit -n -S' -i HEAD~10 - 重签完成后强制推送远程即可:
git push --force
注意事项
- 所有改写历史提交的操作都会修改提交哈希值,操作前务必备份原始仓库,避免数据丢失
- 如果仓库有其他协作者,操作完成后需要通知所有协作者重新克隆仓库,或执行变基操作同步新的提交历史
- 公开仓库如果已经有大量外部fork,不建议执行历史改写操作,会导致所有fork的提交历史和上游不匹配
内容的提问来源于stack exchange,提问作者Psuedodoro
相关产品推荐
相关产品推荐

