github 上commit后,绿格子(contribution)却不显示
问题描述
今天一直在github上面commit代码,但是github中并没有显示自己的contribution(没有绿色的格子),全是空白,网上一查是因为邮箱不一致导致的,难道以前的contribution就无法弥补回来了吗?这篇文章告诉你解决方法。
原因分析
哪些条件下,才符合Github的contribution?官方的解释如下
- Issues 和 pull requests
- ·这个操作是在一年内
- 这个操作针对一个独立的仓库,不能是fork
- Commits, 如果提交符合以下所有条件,则会在您的贡献图中显示:
- 用于提交的电子邮件地址与您的 GitHub 帐户关联。
- 提交在独立的仓库而不是fork仓库中进行。
- 提交在以下位置进行:
- 在仓库的默认分支中(通常为 master)
- 在 gh-pages 分支 (包含 "About GitHub Pages."的仓库)
- 此外,必须至少满足以下条件之一(主要针对你Commit的仓库不是你创建的):
- 您是仓库中的协作者,或者是拥有该仓库的组织的成员。
- 您已fork该仓库。
- 您对这个仓库发起过pull request或者issue。
- 您已为仓库标记star。
- 24 小时内进行的提交
进行满足计为贡献要求的提交后,您可能需要等待最长 24 小时才能看到在贡献图中显示的贡献。 - Contributions未被Github计入的几个常见原因
- 进行Commits的用户没有被关联到你的Github帐号中。
- 不是在这个版本库的默认分支进行的Commit。
- 这个仓库是一个Fork仓库,而不是独立仓库。
解决方法
这里只针对第一条“进行Commits的用户、邮箱不是你的Github帐号的用户名和邮箱。”的弥补方式。
1、将本地开发环境的github的用户名和邮箱改为自己github的。
在本地的项目中进入git指向如下命令,修改邮箱
git config --global user.email "你的邮件地址"
git config --global user.name "你的Github用户名"
2、创建存储库的全新裸克隆:
git clone --bare https://github.com/user/my-repo.git
cd my-repo.git
3、在git bash执行以下两个脚本
按照自己错误的方式,选择下方的命令进行运行
- 第一个脚本:修改以前邮箱用错的commit记录
git filter-branch --env-filter '
OLD_EMAIL="错误的邮箱"
CORRECT_NAME="github用户名"
CORRECT_EMAIL="github邮箱"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
thenexport GIT_COMMITTER_NAME="$CORRECT_NAME"export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
thenexport GIT_AUTHOR_NAME="$CORRECT_NAME"export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags;
- 第二个脚本:修改以前用户名用错的commit记录
git filter-branch --env-filter '
OLD_NAME="错误的用户名"
CORRECT_NAME="github用户名"
CORRECT_EMAIL="github邮箱"
if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ]
thenexport GIT_COMMITTER_NAME="$CORRECT_NAME"export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ]
thenexport GIT_AUTHOR_NAME="$CORRECT_NAME"export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags;
4、执行完后,查看历史记录是否错误
git log
5、将更正的历史记录推送到GitHub
强制push所有的分支
git push --force --tags origin 'refs/heads/*'