最近换了家公司,由于公司比较大,对提交代码方面也有些规范,这两天就踩了坑,因此在这里记录一下。
1、问题描述
在本地push代码到公司的git服务器上时,git服务器会校验commit message,主要会校验用户名和email。按照规范,我的用户名应该是xxx,email应该是公司邮箱xxx@abc.com,一旦违反这个规则,git服务器就会reject这次push。但由于我是新来的,还不熟悉这个规则,我没有配置好用户名和email,导致我的提交是这样的
![](https://img.haomeiwen.com/i12012091/81a874cfe478f482.png)
开发分支是dev,用户名是zhanghaochen,email是mgoygo@163.com,这违反了公司的规范,push一直被reject,我只能修改这次commit的username和email,才能解决push失败的问题。
在网上搜到的都是用git commit --amand 来修改commit message,但我发现这并不能改变已提交代码的username和email信息。。
2、解决步骤
a、修改本地git的username和email
git config user.name "xxx"
git config user.email "xxx@abc.com"
b、创建新分支
从这次提交前的commit上新建一个新分支。举个例子,我这次错误的提交叫做first commit,这之前的提交是init,那就在init这个commit上执行New Branch,新分支的名字自己起一个,我把它起为temp分支。
![](https://img.haomeiwen.com/i12012091/bb724a35a8458a92.png)
执行New Branch操作后,若还没有将temp分支checkout,则将其checkout,确保当前head在temp分支。
![](https://img.haomeiwen.com/i12012091/9a856f389316bb12.png)
c、执行cherry pick
这第三步骚操作来了,就是将dev分支上错误的commit中代码的改动部分cherry pick到我们的temp这个分支上。
![](https://img.haomeiwen.com/i12012091/6e4c314e217c75c1.png)
修改好commit message并提交。
![](https://img.haomeiwen.com/i12012091/7243fcdd259c3e0e.png)
最终结果如下图所示:
![](https://img.haomeiwen.com/i12012091/3b784a5ef8ffdfe4.png)
可以看到,temp分支上的这个提交,username是xxx,email是xxx@abc.com,已经达到了我们所需要的效果。
d、将temp分支改为dev分支
这一步很简单,删除本地的dev分支,将temp分支重命名为dev分支。
3、总结
本次问题解决本质上相当于是重新写了一遍代码并重新提交。依赖了git的cherry pick这个强大的功能,我们只需要事先修改好username和email,就可以实现修改commit message中的username和email这一需求。
网友评论