Git提交记录没有与我的GitHub账户关联

48

我在试图将我的提交与GitHub账户连接时遇到了问题。GitHub上报告的提交方式如图片所示。值user.nameuser.email是正确的,还有其他检查的想法吗?

提前感谢!

Commit example


我遇到了同样的问题,但与 OP 的标签不同,这意味着提交是通过命令行进行的,而不是来自 Eclipse。我的 Github 照片(与我的 StackOverflow 照片相同)未出现在提交中,它们也未出现在我的“贡献活动”中。我不确定如何解决这个问题,希望能得到任何帮助。 - La-comadreja
1
@La-comadreja,你使用什么协议推送到github.com?如果不知道,请运行git remote -v并报告它的样子(git协议)。 - Dennis van der Schagt
以下是 git remote -v 的结果: origin git@github.com:/La-comadreja/git_test.git (获取) origin git@github.com:/La-comadreja/git_test.git (推送) - La-comadreja
8个回答

81
即使您的设置看起来正确,但此错误意味着 user.email 字段中的某些内容不正确,这会给Github提供关于提交者的错误信息。一个小错误可能会导致整个过程失败。修复方法在第三步,前两步帮助识别问题所在。
第一步,运行git config -l检查您的设置,并确保其中没有意外的内容。运行git log并注意Author字段的样式。它应该是Author: 您的名字 <您的Github邮箱@example.com>格式。括号内的部分是Github关注的重点。
第二步,如果您之前能够成功提交某些内容,请打开该仓库并运行git log找到一切正常工作的提交。将那个Author字段与未正常工作的进行对比,看看是否有差异。
第三步,如果有差异,请切换回出现问题的仓库并运行git config --global user.email correct-email@example.com
如果问题仍然存在,请检查您的Github电子邮件设置,确保您使用的电子邮件地址已添加到您的帐户中。
有关更多信息,请参见此帮助文章

谢谢。我已经在Github上更改了电子邮件,所以应该是一样的。至于用户名,“Author”是我在键入“git log”时的个人名称,但是当我在git上查看相同的提交时,我的Github用户名是另一个。因此,“user.name”似乎出了点问题。 - La-comadreja
顺便说一下 - 我刚在Github上更新了我的电子邮件地址,我的user.email应该与这个新的电子邮件地址相同。 - La-comadreja
1
您可以使用git config命令设置global标志,以更改所有存储库的相应设置(如果未被特定存储库设置覆盖),例如:git config --global user.email "test@example.com"。对于user.nameuser.email的更改仅适用于新提交。 - Dennis van der Schagt
1
谢谢,@dennisschagt,这些都是很好的观点。我正在更新我的答案以反映这些建议。 - stvnrlly
1
运行 git config -l 命令后,向输出的顶部看,你会看到 user.email=。这可能是问题所在。你的电脑可能自动设置了一些东西。因此,请运行上面的 git config 命令,然后你就可以愉快地继续了 :) - Anthony Avila
显示剩余2条评论

8

我有一个类似的问题,stvnrlly的回答很有用。 在我的情况下,运行以下命令:

git config --global user.email

在我的情况下,CL会输出"email@email.com",这是错误的,因为它应该显示没有""的电子邮件地址。所以我认为设置并没有正确完成。


4
我今天也遇到了这个问题,但在我的情况下,提交很旧,并且我在使用错误的详细信息提交一周后才发现了这个问题。 因此,本答案是针对当您发现您的 提交未连接到您的GitHub时。首先按照已经提到的内容正确设置你的 git config 设置。
现在,要修改您的提交历史,请按照以下步骤进行:
  1. 进入您的工作目录并克隆您的存储库
$ cd working_dir
$ git clone --bare https://github.com/user/repo.git
  1. 进入克隆的目录
$ cd repo.git
  1. Your commits might be unlinked to your original GitHub due to various reasons, i.e. incorrect/old email, incorrect/old username, etc. Also, your commit and/or authorship details might be incorrect. I list down different steps for different cases.

    3.1 Incorrect email linked

    If commit details are incorrect:

    Paste the following code in your command line.

    git filter-branch --env-filter '
    OLD_EMAIL="old@email.com"
    CORRECT_NAME="correct-username"
    CORRECT_EMAIL="correct@email.com"
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
      export GIT_COMMITTER_NAME="$CORRECT_NAME"
      export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    

    If author details are incorrect:

    Paste the following code in your command line.

    git filter-branch --env-filter '
    OLD_EMAIL="old@email.com"
    CORRECT_NAME="correct-username"
    CORRECT_EMAIL="correct@email.com"
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
      export GIT_AUTHOR_NAME="$CORRECT_NAME"
      export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    

    Here, replace OLD_EMAIL with your old email address, CORRECT_NAME with your current username, and CORRECT_EMAIL with your current correct email address.

    You can check your old email address(es) using the command: git log --pretty="format:%ae"

    3.2. Wrong username linked

    If commit details are incorrect:

    Paste the following code in your command line.

    git filter-branch --env-filter '
    OLD_NAME="old-username"
    CORRECT_NAME="correct-username"
    CORRECT_EMAIL="correct@email.com"
    if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ]
    then
      export GIT_COMMITTER_NAME="$CORRECT_NAME"
      export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    

    If author details are incorrect:

    Paste the following code in your command line.

    git filter-branch --env-filter '
    OLD_NAME="old-username"
    CORRECT_NAME="correct-username"
    CORRECT_EMAIL="correct@email.com"
    if [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ]
    then
      export GIT_AUTHOR_NAME="$CORRECT_NAME"
      export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    

    Here, replace OLD_NAME with your old name/username appearing on commits, CORRECT_NAME with your current username, and CORRECT_EMAIL with your current correct email address.

    Your output should look something like this:

    Rewrite c9ef481aca2cbeac930da8b1250c7f81ac779372 (19/20) (2 seconds passed, remaining 0 predicted)
    Ref 'refs/heads/main' was rewritten
    

    If your output looks like this, move to step 4.

  2. Push the modified history to your original repository.

$ git push --force --tags origin 'refs/heads/*'

您的输出应该类似于以下内容:
Username for 'https://github.com': user
Password for 'https://user@github.com':
Enumerating objects: 96, done.
Counting objects: 100% (96/96), done.
Delta compression using up to 40 threads
Compressing objects: 100% (48/48), done.
Writing objects: 100% (94/94), 852.67 KiB | 42.63 MiB/s, done.
Total 94 (delta 41), reused 77 (delta 40)
remote: Resolving deltas: 100% (41/41), done.
To https://github.com/user/repo.git
 + 4777199...1f210c5 main -> main (forced update)

离开克隆的仓库目录并删除它。
$ cd ..
$ rm -rf repo.git
  • 现在你的更新应该会反映在你的提交历史中了!

  • 这还能用吗?对我没用。另外,专业提示:确保您输入的命令完全正确。我曾试图聪明地不设置CORRECT_NAME参数,因为我不需要更改我的用户名,但最终导致了致命错误:空标识名称错误。 - Some Guy

    2
    如果你的电子邮件地址是从gmail获取的,并且在其中有一个“.”标记,就像我一样,你可能会遇到这样的问题。例如,如果你的原始电子邮件地址是test.code@gmail.com,并且你在注册github时注册为testcode@gmail.com,那么你很可能会遇到此错误。
    解决方法是:你需要将两个电子邮件地址链接到你的github帐户。
    最初的回答:如果您的Gmail电子邮件地址中含有“.”,则需要将其与未包含“.”的电子邮件地址链接到您的GitHub帐户,以避免错误。

    1
    以下是我解决问题的确切步骤:
    (1)我的~/.gitconfig文件中的user.name字段不需要与Github上的匹配。 但是,~/.gitconfig中的user.email字段需要与Github上的电子邮件字段完全匹配,逐字逐句。
    (2)Github上相关的电子邮件字段位于“设置”下方(右上角看起来像齿轮的图标),而不是在“您的个人资料”中重置电子邮件(这方面的说明让我感到困惑),我需要实际点击名为“电子邮件”的设置部分,并添加我在user.email中拥有的新电子邮件地址。 我按照Github上的说明验证了此电子邮件地址。 我不需要将此电子邮件地址设置为“主要”以完全将我的计算机与我的Github帐户同步。
    Mac OS X的文件路径和名称是标准的。 感谢@stvnrlly,我使用了您答案的一般意思。

    1
    据我所知,您需要 3 个配置,才能将提交链接到您的帐户:
    • user.email
    • user.name
    • user.username

    user.email:这里填写您创建账户或当前链接到账户的电子邮件地址。不是xyz@github.com,而是xyz@gmail.com

    user.name | user.username:您需要两者,两者的值应该相同。它在您的账户 URL、个人资料等处都可以找到。

    如何设置这些值:

    git config --global user.email "xyz@gmail.com"
    git config --global user.name xyz
    git config --global user.username xyz
    

    检查这些值是否已设置:

    git config --global --list
    

    0

    我刚刚将我的工作邮箱添加到了GitHub的备用邮箱中


    -2

    首先,您需要获取远程存储库的引用。

    git remote add origin https://github.com/yourGithubAccount/yourRepo.git

    然后执行git push -u origin master命令。


    1
    这似乎没有回答问题。你能详细说明一下吗? - neontapir

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