最近在看自己的Github时,偶然间发现,自己的许多Conmmit都没有计算在Contribution内,然后看自己库中的Commit记录时,发现没有被记录在Contribution Graph中的Commit并不显示自己的头像,同时显示的用户名和自己创建Github账号时填的用户名也不一样。于是在网上找了一些资料,其中Github官方给出了一个官方文件,告诉我们什么样的Commit可以被记入Contribution,请点击此处查看。
在官方的帮助文档中,有一条是Commit被记入Contribution中必须满足用于Commit的邮件地址必须与Github账户相关联。其实,这也是为什么我的Commit没有被记入Contribution和不显示头像的原因,也是大多数人也是这个原因。
原因就是,当我们在电脑中下载了Git客户端后,我们会用本地git命令行配置一个用户名和邮箱地址,这个用户名和邮箱地址只有与创建Github时的邮箱和地址相同时,每次往Github上commit时,Github就会识别出commit的就是你本人,此时这次commit才会被记入Contribution。好了知道原因了,我们来具体看一下,如何操作:
首先,你需要知道,在你安装git客户端时,你配置的用户名和邮箱地址是什么,用下面的命令,可以显示出每次commit时的日志:
git commit log
在日志上可以看到每次commit时,你是用的用户名和邮箱地址,如果与Github上的不一致,那么问题就在于此了。
下面我们要把commit时的用户名和邮箱地址改为与Github注册时的一致,我们可以通过下面的命令:
git config --global user.name <your username for Github>
git config --global user.email <your email address for Github>
修改后,你以后再向Github提交代码时,就会看到commit被记入Contribution了。
同时,我们有一种补救方法,可以将以前与没有被记入Contribution的commits关联的邮箱修改为新的邮箱,那么,以前没有记入Contribution的commits,也会重新被记入Contribution。具体步骤如下:
1. 将要修改的repo克隆到本地
git clone --bare <the repo address>
2. 将命令行的当前目录切换到新克隆的库下
cd <the repo path>
3. 复制粘贴下面的脚本,并根据你的信息修改以下变量
#!/bin/bash
git filter-branch --env-filter '
OLD_EMAIL=<旧邮箱地址>
CORRECT_NAME=<正确用户名>
CORRECT_EMAIL=<正确邮箱地址>
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
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
4. 用git log查看用户名和邮箱地址有没有改过来
5. 把正确历史push到Github上
6. 删掉刚刚克隆的repo