如何在git中用错误的作者重命名提交

时间:2016-06-30 21:45:34

标签: git github

我已经在一个github项目中工作了几个月,而且由于"错误的作者信息而导致我所做的一系列提交没有分配给我#。 / p>

有没有办法循环执行此提交或立即将作者更新为所有提交?他们大多是100左右。

由于

更新:  尝试在git bash上运行脚本时遇到此错误: Error

这个在Windows cmd:Error 2 帮助任何人?我做错了什么?

3 个答案:

答案 0 :(得分:1)

您可以修改提交编辑作者:

git commit --amend --author="John Doe <someone@example.com>"

或使用交互式rebase编辑多个提交。执行 git rebase -i HEAD~5 ,然后标记所有必需的提交进行编辑,并使用正确的作者字段重新发送它们,如上面的单个提交示例所示。

答案 1 :(得分:1)

您需要使用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

答案 2 :(得分: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