Git-提交记录不是github/gitee等账号

40 阅读2分钟

背景

GitHub上的仓库,提交既有自己账号,又有非本人账号,如下:

原因

:配置Git的时候,使用的不是GitHub的账号,导致存在两个共有的贡献者

使用命令用git config user.name / git config user.email 来查看自己的git所属配置信息,结果:

解决方案

将用户名以及账号配置为Github账号

方案一:

在GitHub Desktop中修改

方案二

在Source Tree中修改

方案三:

命令行

全局配置
git config --global user.name "github’s Name"

git config --global user.email "github@xx.com"
仅在当前项目中配置
git config --local user.name "your_name"

git config --local user.email "your_email@domain.com"
常用参数

config有几个常用参数, 缺省等于local

–local 只对当前仓库有效

–global 对登录⽤户所有仓库有效

–system 对系统的所有⽤户有效

–unset 清除某个信息

git config --unset --local user.name

显示config的配置可以 加 --list

git config --list --local

以前的提交记录

如果你不想浪费之前的commit贡献,需要把所有你用默认账户的commit都归为你真正的名下怎么办.

我们需要修改所有的commit和push历史

git filter-branch -f --env-filter '
if [ "$GIT_AUTHOR_NAME" = "oldName" ]
then
export GIT_AUTHOR_NAME="newName"
export GIT_AUTHOR_EMAIL="newEmail"
fi
' HEAD
 
git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldName" ]
then
export GIT_COMMITTER_NAME="newName"
export GIT_COMMITTER_EMAIL="newEmail"
fi
' HEAD

这里的oldName我们可以通过git log来查看,其实这里只要修改GIT_COMMITTER就可以了.

AUTHOR记录的是这次修改的作者信息,COMMITTER是这次提交的用户信息.

注意两者区别,

如果你自己写自己提交,那么两者都是你.

有的项目有的人并没有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

这样就全部改过来了.

注意:

你这里将你本地git的账户和邮箱重新设置了,但是github并没有那么智能就能判断你是原来你系统默认的用户.

也就是说你新配置的用户和你默认的被github识别成两个用户.

这样你以后操作的时候commit 或者 push的时候有可能产生冲突.

解决方法是

1.使用强制push的方法:

git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

2.push前先将远程repository修改pull下来

git pull origin master
git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支:

git branch [name]
然后push

git push -u origin [name]