关于git:我在GitHub上的提交不是来自“我的”用户

My commits on GitHub are not from “my” user

几周后,我在Github上的承诺被列在作者muheim下,而不是jmuheim下。我不知道这是怎么改变的,我想把它改回jmuheim,但我不知道如何跟踪它。

我在MacOS上,我的密码保存在钥匙链中。但我在那里没有找到任何账户,只有账户。

我的系统上有一个id_rsa.pub,我很确定它映射到了github上的jmuheim,但我不是一个ssh专家。

那么,为什么和如何使用git push用户?如果我不能解决这个问题,我将尝试删除muheim用户(这是我几年前使用的一个遗留用户),但我希望有人能帮助我找到这个问题。


您可以在计算机上设置全局用户名和用户电子邮件:

1
2
git config --global user.name jmuheim
git config --global user.email [email protected]

如果您想更改以前的提交,它会变得更复杂一些。请注意,更改作者信息将使拉请求或分叉无法与以前的作者信息合并,因为Git会告诉您这些信息完全不同。不管怎样,Github提供了一个教程,用于在更改电子邮件后搜索"错误"名称,它应该如下所示:

  • 创建存储库的新的裸机克隆:

    1
    2
    git clone --bare https://github.com/user/repo.git
    cd repo.git
  • 运行此脚本,它将在所有从muheim到jmuheim的分支中更改提交者名称和作者名称。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh

    git filter-branch --env-filter '

    OLD_NAME="muheim"
    CORRECT_NAME="jmuheim"

    if ["$GIT_AUTHOR_NAME" ="$OLD_NAME" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
    fi
    if ["$GIT_COMMITTER_NAME" ="$OLD_NAME" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
    fi
    ' --tag-name-filter cat -- --branches --tags

  • 推到Github

    1
    git push --force --tags origin 'refs/heads/*'
  • 我建议删除旧的克隆并继续使用新的git clone

    您可以通过以下方式检查整个回购中使用的用户名:

    1
    git log --all --full-history --pretty=format:"%ae  -  %ce  -  %an :%cn"


    认证与用于提交的user.nameuser.email无关。

    检查你的git config user.name值:你可以把它改回原来的值。

    您还可以将用户名/电子邮件替换为旧提交。(尽管这将改写回购的历史:如果你是唯一一个与之合作的人,这并不重要)

    也要检查您的git remote -v值:如果这是一个https URL,那么您的id_rsa.pub公共ssh密钥无论如何都不会被使用。

    但是:如果您的提交被推到右边的new-user/repo,那么是的,仅仅更改user.email就足以让新的提交附加到正确的用户。您可以全局更改,或者,如果您管理多个用户,则仅针对该回购:

    1
    2
     cd /path/to/repo
     git config user.email email-of-second-GitHub-account

    请参阅"为什么我的提交链接到错误的用户?".