记录一次Git邮箱错误的修复方法
就在刚刚, 我发现我的minecraftctl 贡献者变成了两个人。可是我从未通过某人的PR请求啊?难道是我被盗号了?可是当我翻看commits时, 贡献者却是 BuildTools 这让我不禁疑惑,难道我的项目已经大到spigot都来贡献代码了?我是应该去看病了吗?
我第一时间运行git config user.email
查看了我项目中的邮箱。这一查果然发现了问题,邮箱被改成了spigot的邮箱,再仔细一回想,我瞬间明白了缘由
就在最近,我重装系统后忘记配置Git邮箱就使用了spigot发行的BuildTools本地构建spigot,在使用git之前是必须要配置邮箱的,spigot发现我没有配置邮箱,应该就为我默认配置了一个,我配置好私钥后就直接开始写代码了,结果就酿成了这样的惨剧。
推理归推理,问题也还是要解决的,我决定将问题分成远程和本地两个部分解决,因为我本地还有一些尚未推送的提交,那些可以使用reset来改,而远程的要改,最合适的就是使用rebase了。
由于本地有未提交的代码,是没法使用rebase的,于是我先克隆了远程的仓库,也正好先将远程的修改完
git clone [email protected]:MemoryShadow/minecraftctl.git minecraftctl_temp
cd minecraftctl_temp
在此项目目录中,我用git log
确认了最开始受到影响的提交后,毫不犹豫执行了rebase
git rebase -i 39c3aafe4bf7d896ce4b7ec73e7f1d157a9e1c55
终端使用vi打开了rebase的界面,询问我要进行什么操作,我小心翼翼的将涉及的相关commits条目行首的pick
改为edit
并使用:wq
保存。
或许你为什么会说:“为什么你不直接用:%s/^pick /edit
”呢?不用这个的原因就是我害怕改错了,还是自己手动来吧,反正发现的及时,涉及的commits数目较少。
在保存后,就提示我可以修改了,rebase是从旧向新一条一条commits来改的。我这次的目的是修改邮箱和名字,于是我执行了下面这些命令
git commit --amend --author="MemoryShadow <[email protected]>" --no-edit
# 这条就是继续下一条,上面那条已经修改完了
git rebase --continue
在不断的执行上面这两条命令后,终于完成了所有commits的修改,我可以放心的强制推送到远程了
git push -f
至此,远程的问题已经解决了,本地的也用同样的方式解决就好(实际上我是使用的reset解决的,但是我现在要去吃饭咯~如果有问题欢迎在评论区留言讨论)