我怎么告诉github我从我的笔记本电脑上推了所有提交?

时间:2014-09-08 16:06:29

标签: git github

所以我一直在从我的笔记本电脑上推送更改到我的公共存储库(通过登录我的github帐户)。我的笔记本电脑的推送有一个作为John Corser的作者,我使用github编辑器(自述文件)完成的提交显示为由johnpc(我的github帐户)编写。检查分析,johnpc只在存储库的历史记录中提交了两次,但实际上我是最重要的贡献者。

如何在github中修复此问题?

git history

2 个答案:

答案 0 :(得分:3)

由于用户名配置错误,很可能会发生这种情况。

在项目的根文件夹中打开~/.gitconfig.git/config,&检查用户名字段是否存在于其中任何一个中并且设置正确。

要更正旧的提交,请使用以下内容(它将重写所有以johnpc作为用户的提交的提交信息)

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "johnpc" ];
        then
                GIT_COMMITTER_NAME="John Corser";
                GIT_AUTHOR_NAME="John Corser";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

<强> 修改

通过github上的存储库后,很明显您使用了2台独立的计算机来提交代码,其中一台使用凭据[johnpc, johnpc@email.domain],另一台使用凭据[John Corser, john@email.domain]。要消除差异,请在两台计算机中转到项目目录并运行以下命令

$ git config user.name "johnpc"
$ git config user.email johnpc@email.domain

这标准化您的项目使用相同的用户名,来自两个位置的电子邮件,因此您以后的所有提交都是安全的。

接下来,要更正现有的回购历史记录,请执行

git filter-branch --commit-filter '
    if [ "$GIT_COMMITTER_NAME" = "John Corser" ];
    then
            GIT_COMMITTER_NAME="johnpc";
            GIT_AUTHOR_NAME="johnpc";
            GIT_COMMITTER_EMAIL="johnpc@email.domain";
            GIT_AUTHOR_EMAIL="johnpc@email.domain";
            git commit-tree "$@";
    else
            git commit-tree "$@";
    fi' HEAD

请勿忘记将上面的电子邮件ID更改为您的实际电子邮件ID(我已对其进行了清理以防止其公开发布)

最后,强制将您的更改推送到您的github帐户

git push -f origin master

由于您有一些其他人参与此存储库,请让他们各自在他们的系统上执行git fetch,然后执行git checkout master && git rebase origin/master。在这个阶段不要做git pullgit fetch && git merge

现在,所有人都应该拥有具有适当提交历史记录的更新代码。

PS:为了更加安全,您可以在本地创建github repo的备份克隆。

答案 1 :(得分:2)

Github通过电子邮件地址链接作者和提交者,而不是通过名称。使用git log查看作者和提交者电子邮件地址对相关提交的影响。如果您使用有效的电子邮件地址进行提交,那么只需使用您的github帐户验证该电子邮件地址,然后他们将链接到您的github配置文件(大约一天左右)。如果您使用无效的电子邮件地址进行提交(git&#39; s默认值通常类似于username @ localhostname)。然后你必须重写所有的提交来解决这个问题。 (您最终会使用新信息进行新提交,并将所有分支指针移动到不引用任何&#34; bad&#34;提交)。