本文是基于idea的操作,亲测可用
前言:
很多公司都会自定义 Git - 使用强制策略,那么他的commit信息就会有固定的格式,一旦不是这个格式,就会出现push失败
但是push失败,很多也只在dev和master分支做强制限定,其他分支却没有限定(当然,我觉得这种做法有些弊端,应该所有都限定才对,但我对这个强制限定没研究过,暂且不说这个问题)
比如限定的是:所有commit都必须以ABC开头,比如ABC-1,ABC-2
那么如果我们在其他分支开发,已经提交了很多次,其中有些没有带ABC,那么将来合并到dev的时候,commit会成功,但push就会失败
这种情况,你全部回退已经不可能了,只能修改git历史提交的commit信息,在前面加上ABC
修改git历史提交的commit信息
这个是用到了git的rebase命令,大致情况就是进入rebase模式,然后修改当初某条提交的commit信息,保存退出
下面说说详细步骤:
1.找到你要改的那条commit消息,在version control栏里,从现在往回数数,看是第几条修改的
也可以在terminal栏里,命令行输入 git log ,按回车一直往回找,总之就是找到你要改的那个是多少次以前修改的。
2.知道次数后,就开始进入rebase模式了,命令行输入:git rebase -i HEAD~28
比如28就是你的次数,这时你会看到一些信息,类似于:
pick XXX 你的某条commit信息
pick XXX 你的某条commit信息
pick XXX 你的某条commit信息
如果没有找到你要改的commit信息,那就是第一步找错了,:wq推出重新找
如果你第一步数对了,应该里面有一条就是你要改的,那么将那条对应前面的pick改成edit
这个可以理解成linux的vi语法,按i进入insert模式,修改完后etc,然后:wq保存退出
3.上一步只是说找到你要改的那条,并没有真正改,此时命令行输入:git commit --amend
然后你就会看到你要改的commit信息,然后把他改成你要的格式,还是:wq保存退出
4.改完了,push一下,就没问题了。
push的时候,如果有冲突,accept theirs就行
相关参考:
1.自定义 Git - 使用强制策略的一个例子
https://git-scm.com/book/zh/v2/自定义-Git-使用强制策略的一个例子
2.修改 git 历史提交 commit 信息(重写历史)
https://www.jianshu.com/p/0f1fbd50b4be