git push 问题:committer 'xxx (x)' does not match your user account
自己在本地使用多个 git
帐号,或者多个人使用一个机器部署多个 git
帐号的时候,经常会有一些冲突,今天就遇到了一个。
我们多个人共同使用一个机器,昨天改配置的时候,不小心将我的用户名和邮箱设置成了全局配置,结果今天别人在用的时候,就不能push了,提示如下错误信息:
committer 'pearl ([email protected])' does not match your user account.
the following user name and email address is currently registered.
other ([email protected])
就这个问题百度 google 查了很久,重新设置了 ssh key
也还不行,仍然一直报错,根据 git
的报错提示执行
git commit --amend --reset-author
还是不能解决问题,后来和朋友一起研究他的错误提示信息,显示的是 committer 不正确,然后 git log
查看日志,发现 log
里面有用我的用户名提交的信息,所以决定回滚看看,于是执行
git reset --hard logID(我提交之前的log ID)
再重新设置 ssh key,再 git push
就好了。
这个错误提示的原因是由于使用的git仓库是基于ssh协议的(非https),需要密钥对并建立连接。执行 git commit
的时候本地提交不受 ssh 协议限定,也不会检测用户权限,但是提交信息会以 git config user.name
为名,所以在提交日志中出现了非法权限提交。
git pull:只需要建立ssh连接即可(ssh-add),所以git pull正常;
git commit: 本地提交不受 ssh 协议限定,也不会检测用户权限,但是提交信息会以 git config user.name
为名
git push:需要建立ssh连接,并且会检测用户在远程设置中设否具有权限(包括每一次提交者的权限),如果有权限则提交,否则显示权限
参考文档:传送门
不要设置全局的用户名和邮箱,在对应的 git
项目下设置用户信息
git config user.name "your_username"
git config user.email "[email protected]"
生成 ssh key
ssh-keygen -t rsa -C "[email protected]"
# 看到如下提示信息后,输入 ssh key 的文件名,如 id_rsa_username
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home_path/.ssh/id_rsa):id_rsa_username
然后可以在当前目录下看到两个新生成的文件,一个 id_rsa_username,一个 id_rsa_username.pub。
将 ssh key 添加到你的 git 项目中(如 github)
cat id_rsa_username.pub
粘贴上面内容到 git 项目中的 ssh key 设置的地方即可
将新生成的 key 添加到 ssh-agent 中
eval "$(ssh-agent -s)"
Agent pid 59566
cp id_rsa_username ~/.ssh/
cp id_rsa_username.pub ~/.ssh/
ssh-add ~/.ssh/id_rsa
设置配置文件,不用每次都添加
cd ~/.ssh
vim config
# 该文件用于配置私钥对应的服务器
# Default github user(first@mail.com)
Host github.com
HostName github.com
User username1
IdentityFile ~/.ssh/id_rsa_username1
# second user(second@mail.com)
# 建一个github别名,新建的帐号使用这个别名做克隆和更新
Host github2
HostName github.com
User username2
IdentityFile ~/.ssh/id_rsa_username2
git help [command]
git status
git clone [url]
git init
git pull
git add [file]
git commit -m "commit info"
git rm [file]
git rm -f [file]
git rm --cached [file]
git mv [old-name] [new-name]
git branch
git branch -r
git branch -a
git branch [branch_name]
git checkout [branch_name]
git maege [branch_name]
git branch -d [branch-name]
git branch -D [branch_name]
git reset --hard HEAD
git reset --hard log_id(回滚到某一指定log位置)
git log
git log -p
git log --stat
git diff --cached
git diff [file]
git diff > diff.txt
git diff [branch_name]
git commit --amend
git reset HEAD [file]
git checkout -- [file_name]
git remote
git remote -v
git remote add [remote_name] [url]
git fetch [remote_name] [branch_name]
git push [remote_name] [branch_name]
git remote show [remote_name]
git remote rename [old_name] [new_name]
git remote rm [remote_name]
git tag
git tag -l [keyword]
git tag [tag_name]
git tag -a [tag_name] -m [msg]
git tag -a [tag_name] [hash]
git show [tag_name]
git push [remote_name] [tag_name]
git push [remote_name] --tags
git checkout b
git rebase a
git stash
git stash list
git stash apply [stash_name]
git stash pop