Construction | 张小伦的网络日志

修改commit的作者信息要几步呢?

Posted on:2023-07-26 04:00
    日记

我有两台Mac,一台mac mini在家使用,一台macbook用于工作,偶尔周末也会开发一些side project代码。有时候我会从不同的设备向github仓库push代码。在macbook上开发时,如果我没有对github的仓库设置我的个人用户名和邮箱,当我push代码时,会使用配置在全局的工作使用的git帐号信息。

在github上看到自己的工作帐号时,总是感觉不舒服。如何修改commit信息中的帐号呢?

在创建commit的时候,可以通过增加参数—author设置本次commit的作者信息。

git commit -m "my commit" --author "zhanglun <zhanglun1410@gmail.com>"

如果commit已经创建了,想对其记录中的作者信息进行修改,可以使用—amend参数。

git commit --amend --author "zhanglun <zhanglun1410@gmail.com>"

还可以使用rebase编辑commit的作者,不过使用rebase时,其实也是—amend的应用。

如果commit已经push到远端,则可能需要一些小技巧了,下面的几个步骤就是通过替换commit来实现修改提交者帐号信息的能力。

1、首先,找到记录中想替换的comimit。

git log --abbrev-commit
commit b123892 (HEAD -> master, origin/master, origin/HEAD)
Author: thewrongname <someone@else.com>
Date:   Thu Aug 27 10:10:33 2020 -0500

    Commit from another computer!

commit a928338
Author: dev.logfetch <dev.logfetch@gmail.com>
Date:   Thu Aug 27 00:28:07 2020 -0500

    Commit from my personal computer!

...

假设我们想将第一个commit b123892的作者修改成第二个commit相同的作者。先切换到这个commit。

git checkout b123892

2、修改作者。

git commit --amend --author "logfetch <dev.logfetch@gmail.com>"

3、接下来回到第一步所在的分支

# git checkout branch_name
git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
    c894824 Commit from another computer!

c894824是新创建的commit。

4、使用新commit替换旧commit

# git replace old_hash new_hash
git replace b123892 c894824

5、基于新的commit重写未来的commit

git filter-branch -- --all

6、删除掉被替换的commit

# git replace -d old_hash
git replace -d b123892

建议在执行push操作之前,使用log命令检查之前的操作是否成功。

参考