配置了新的mac笔记本。完成了一系列开发环境配置,安装了git,IDE,配置了git ssh秘钥,clone下项目代码,顺利看到了所负责项目的代码。并且完成新的branch的创建和分支提交到远程仓库,和几次代码的commit到本地仓库等工作,一切很顺利。
问题描述:
当开发完成一个小的模块,进行了codeReview之后,准备将代码push到远程仓库。使用IDE中Git Repository Push进行代码push,IDE报错:Push rejected(如下图):
因为没有具体reject信息,使用Terminal git push命令又进行远程的push,返回的报错信息如下:
Git log 中发现 "xxx@alibaba-inc.com" 邮箱不符合要求,请务必使用公司邮箱。
问题原因:
经过检查发现问题的原因是在执行:
git config --global user.name ‘username’
git config --global user.email ‘email’
时使用了中文引号“”,导致不能识别正确的email
命令时报错信息写的很清楚,使用命令重新设置 username和email
然后执行 git-m
并给出了git-m工具的几种安装方式,于是按照提示重新操作了一下,安装了git-m工具,并重新执行了正确的语句。
但是正确执行之后,进行git push操作任然是"Push rejected",无法进行提交。
后续又排查了其他方面的问题
- 项目的git权限问题
- 甚至是我邮箱命名的问题
一系列排查之后最终还是定位到了 git设置的email的问题上
问题解决:
因为最初设置了错误的包含中文引号email,所以在之后的所有提交的git log中的email都是错误的email,按照报错提示,设置正确的username和email之后,执行git-m,说是可以自动修正log信息,但实际上之前已经commit的git log中的email信息并没有被修改正确。
之所以执行了正确的username和email之后仍然不能够git push,就是因为虽然当前global email是正确的但是的因为在git log中的email是错误的,携带中文引号的,所以gitlab在校验所有的commit信息时进行了reject!
正确的解决方式:
方案一:执行以下命令
git log
git reset 版本号
git config --global user.name ‘username‘
git config --global user.email ‘email ’
其中要注意的是git reset 版本号
要reset的“版本号”一定要确保此版本号之前的log中的email是正确的。
方案二:
- 设置正确的username和email
- 重新clone项目,进行commit提交
- git push
问题反思:
正如文章开头所说的:认真是成功的秘诀,粗心是失败的伴侣。 产生这个问题的根本原因就是因为自己粗心大意,因为觉得自己对git很熟悉,天天使用,很多地方想当然,没有做到认真仔细,产生了这个问题,浪费了一下午的解决和排查的时间。