本文转载自简书桃子大人

最近在提交代码的时候碰到一个问题,代码commit并push到远程仓库后发现提交人的信息有误,远程仓库显示的提交人不是我。虽然这对于开发来说并无大碍,但身为强迫症的我怎么能忍?但代码已经push到远程仓库了,怎么修改记录里提交人的姓名和邮箱?

在网上查了一些资料后,发现了很多种暴力的解决方法,比如直接删除整个分支等等。这里分享一种相对来说比较优雅的方法。

这里用到了git中的rebase,关于rebase相关知识网上很多,这里就不大刀阔斧的讲基本原理了,直接上解决方法。

首先我们要查看本地仓库的commit信息,这里可以打开git bash输入git log命令查看,也可以使用git GUI图形界面查看。这里我通过git GUI查看项目的commit信息。

在项目根目录中打开git GUI界面,这里我没有其它分支,直接点击Visualize master's History就可以查看主线的历史记录了。

这里可以看到我们每一次commit的信息,包括SHA1 ID的值。这里我们只需要SHA1 ID值的前七位就行了。这里我们以修改前面两个commit用户名和邮箱为例。找到前两个commit前一次commit的SHA1 ID值前七位。这里是795b3a7。

打开git bash,执行rebase -i操作。

执行后会出现git的vim编辑器,里面会有哈希值为795b3a7的commit之后所有commit的信息。这时按下键盘i键进入编辑模式,将需要修改的commit信息前面的pick改成edit。按esc退出编辑模式,输入:wq保存并退出。

这时回到git bash界面,如果看到下面信息就表示成功了,可以开始修改commit信息了。

然后使用git commit --amend --author="zhangsan <zhangsan@qq.com>" --no-edit命令修改提交人的用户名和邮箱。修改完成后使用git rebase --continue命令继续修改下一条。(退出rebase模式也是这句)

这时候打开git GUI查看历史记录就可以看到commit的信息已经被修改了。

然后再无耻的使用git push --force命令将纂改后的历史记录强制push到远程仓库。(PS:强制更新有风险,使用需谨慎!在你强制更新的时候,如果别人也commit了代码,将会被你的强制更新覆盖!)

最后打开GitHub查看项目的历史记录可以看到修改的信息已经同步到服务器了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐