背景
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]