多分支开发,如何清除中间某次提交,关于git基本操作的一次小记

        尽管工作三年时间了,但是直到今天才遇到这个需求,也就简单的了解了一下。目前项目是迭代开发,由于分属不同后端负责人,所以要求按照需求进行发布,也就要求我需要在多个分支进行开发,以适应后端同学的不同进度。奈何本人一向粗枝大叶习惯了,开发完当前A分支以后直接切换B分支,开发其他需求去了,一顿写一顿commit,一顿提交。。。。。结果,后期B分支的需求后端负责人提前完成了,要求先一步上线。要发布B分支时才发现,A分支还没有开发完的接口也被我带到B分支去了。当时的git log是这样的

多分支开发,如何清除中间某次提交,关于git基本操作的一次小记

需要把 64c16的提交给删掉,才能发布,如果用reset直接简单粗暴的进行回滚,那近期提交的代码也会丢失了。这个时候就需要使用rebase这个命令了。它可以完美的删除掉中间的某次指定提交内容,而且不影响其他提交内容。

具体操作是这样的:

git rebase -i commit _id(需要删掉的commit的id)

这个时候控制台会出现不止一条commit内容,类似下图这样,当然我已经把需要删除的commit删掉了,所以仅作为展示。

只需要把要删除的commit前面的pick改为drop就可以了,然后保存退出就ok了。

(写给小白:如果你发现自己居然改不了pick文案,麻烦按一下i,改完了以后发现没办法保存退出了,麻烦按一下esc哦,哈哈,如果你用到了这条tips,那就应该去简单学习一下命令行基本操作啦)

多分支开发,如何清除中间某次提交,关于git基本操作的一次小记

修改好了以后,直接git push -f强制提交到远程,再发布就不会存在多余的代码了。

风险提醒,有的同学搞不清楚rebase与revert的区别,可能会导致后期代码丢失哦,因为rebase是将指定提交直接删除,而revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现。