如何在git中更改错误作者的提交名称

3
我在一个名为y的github项目中工作了几个月,由于“错误的作者信息”,我提交的许多更改没有分配给我。是否有一种方法可以循环浏览这些更改或一次性更新所有更改的作者?它们可能有100个左右。
谢谢。
更新: 尝试在git bash上运行脚本时出现以下错误: 错误 在Windows cmd上出现以下错误:错误2。有人能提供帮助吗?我做错了什么?

我相信无法在GIT中重写历史记录。 - SiKing
@SiKing 你的看法是错误的。尽管通常强烈不建议这样做,但它绝对是可能的,而且并不难。 - twalberg
@twalberg 嗯,乔治·奥威尔会感到骄傲的。;) - SiKing
3个回答

5

您需要使用 filter-branch 命令。

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD `

如果您是此仓库中唯一已提交的用户,则可以直接更新所有引用而不必检查旧内容。
git filter-branch -f --env-filter '
    GIT_AUTHOR_NAME="Newname"
    GIT_AUTHOR_EMAIL="newemail"
    GIT_COMMITTER_NAME="Newname"
    GIT_COMMITTER_EMAIL="newemail"
  ' HEAD

我认为第一个正是我需要的,但我无法运行它! - plicaman

3
您可以更改提交的编辑作者:
git commit --amend --author="John Doe <someone@example.com>"

或者使用交互式变基来编辑多个提交。执行命令git rebase -i HEAD~5,然后标记所有需要编辑的提交,并按照上面单一提交示例中的方式重新提交它们,并附上正确的作者字段。


1

无论如何,你也可以使用filter-branch一次性更改多个提交的电子邮件地址。你需要小心地只更改属于你自己的电子邮件地址,因此你要使用--commit-filter

$ git filter-branch --commit-filter '
        if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
        then
                GIT_AUTHOR_NAME="Scott Chacon";
                GIT_AUTHOR_EMAIL="schacon@example.com";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

这会逐个重写每个提交,以便使用您的新地址。由于提交包含其父代的SHA-1值,因此此命令将更改历史记录中的每个提交SHA-1,而不仅仅是具有匹配电子邮件地址的提交。
参考资料:https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

这就是它,但在 IF 语句中使用 "invalid-email-address" 对吧? - plicaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接