代码提交的时候常常会发生冲突的情况,尤其是协同开发的情况下。比如我们共同维护一个工程模式模块,大家都把测试项往上提交,很多时候会涉及到一些公共接口文件以及资源文件提交,不可避免的会发生这些文件提交冲突的情况。
本文主要是在ubuntu系统下,使用repo以及git提交代码时发生冲突的案例,刚开始对git不够熟悉会觉得很麻烦,很怕冲突的情况发生,因为我大概只会用git pull, git add, git commit, git push。下面介绍一种简单的方法解决冲突:
别的同事已经提交了代码,或者你发扬风格谦让下晚点提交代码。但是,你已经使用git push过了,那么,这个时候使用gitk调出以下界面:
第一步:选中上最近一条有效提交记录,右键选择“reset XXX branch to here”;
第二步:在弹出的Confirm reset界面,选择“Mixed:Leave working tree untouched, reset index”;
第三步:输入git reset --hard HEAD,然后更新到最新代码git pull --rebase;
第四步:重新合入代码并按步骤git add, git commit, git push;
第五步:重新发起走读并提交代码。
值得一提的是,如果连第一条的“reset XXX branch to here”都未出现,怎么办?这种情况笔者也碰到过,可能是因为你已经commit过了,下面的步骤请参考下:
第一步:先git log查看一下当前的提交记录,找到你想恢复到哪条记录,例如你之前提交过最新的记录为倒数第二条;
第二步:git reset --hard HEAD^ 其中' ^ '这个符号表示上一次提交,‘ ^^ ’依此类推就是上上次提交;
第三步:gitk,因为此时已经reset到上一次有效记录中了,这个时候就会出现上一段中提到的“reset XXX branch to here”;
然后参考上一段文字中提到的步骤。
以上仅供参考,笔者也是在多次提交失败的痛苦经历中反省,参考了《Git Community Book》才有点心得,仅做交流和笔记。