问题描述: #
这几天一直在用github来配置和更新博客,但是今天发现github上的contributions并没有我的提交记录。其次相关repository的commits显示如下
原因: #
电脑git是用homebrew
安装的,mac并没有进行本地配置,直接用终端把本地文件push到仓库中了。
因为本地的git默认的user.name和user.email并不是github中的,而是本机的。所以在此期间的commit都是默认本机的。
1. 查看commit记录. #
$git log
虽然在往你的github仓库中push,但是用户名和邮箱却不是你,而是系统默认的pc用户。
2. 查看自己的git所属 #
$git config user.name
$git config user.email
查不出的结果应该是为空。所以github贡献统计的根本就不是你的账户。
解决办法: #
1. 配置本地git #
$git config --global user.name "github accountname"
$git config --global user.email "github@xx.com"
这里只是在git config 后边添加上了要更改的内容即可,--global
参数指的是全局,也就是本地的所有仓库,如果不加就是单个仓库。
修改好后,以后的commit就是你的账户了,就能被统计贡献。
2. 修改commit和push历史 #
修改所有的commit和push历史,把之前所有用默认账户的commit都归为真正的账户名下。
# AUTHOR记录的是这次修改的作者信息
$git filter-branch -f --env-filter '
if [ "$GIT_AUTHOR_NAME" = "oldName" ]
then
export GIT_AUTHOR_NAME="newName"
export GIT_AUTHOR_EMAIL="newEmail"
fi
' HEAD
#COMMITTER是这次提交的用户信息
$git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldName" ]
then
export GIT_COMMITTER_NAME="newName"
export GIT_COMMITTER_EMAIL="newEmail"
fi
' HEAD
注意两者区别,
如果自己写自己提交,那么两者都是你。
有的项目有的人并没有commit权限,所以修改完之后需要交给有权限的人提交,这样你是AUTHOR并不是COMMITTER
如果修改成功提示:Ref ‘refs/heads/master’ was rewritten
如果修改失败提示:Ref ‘refs/heads/master’ is unchanged这里可能是因为填写的oldName
并没有找到。
如果无差别修改的话去掉if..fi
$git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='newName';
GIT_AUTHOR_EMAIL='newEmail';
GIT_COMMITTER_NAME='newName';
GIT_COMMITTER_EMAIL='newEmail'
" HEAD
3. push到远程仓库 #
- 使用强制push的方法:
$git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
我这里只是自己写的博客,所以就直切全部强制覆盖掉了。
- push前先将远程repository修改pull下来
$git pull origin main
$git push -u origin main
- 若不想merge远程和本地修改,可以先创建新的分支:
$git branch [name]
$git push -u origin [name]
最终修改成功🎉