当前位置: 首页 > 工具软件 > gitver > 使用案例 >

git rebase 和revert

公冶子安
2023-12-01

还原下现场,有以下两个分支,dev  ,p个人分支,p 分支在开发一个可能会用也可能不用的功能。

因为P个人分支经过rebase ,所以在merge 到 dev 分支时,不产生新的commit ,这也是本次事故比较容易处理的关键。

首先由P merge 到dev,之后未发现其他commit ,遂使用rebase ,打算无痕删除掉某些commit ,问题从这里出现了,我以为没有人在我第一次merge 后没有拉取过,但其实已经被同事A拉取到本地了

无痕删除一些commit之后,推送远程,我以为万事大吉了

在下午的时候,需要提交代码,照例先pull ,发现删除的commit 又传上来了。起初怀疑同事A未拉取,但是不应该啊,这是个老程序员了,不会force update 啊,那么就只有一种可能,该同事本地已经存在了这些commit 了,rebase 因为不产生新commit ,所以不会被更新到本地,本地推送就会再推送上来。

此时想到了git revert,也就是用新的commit 冲掉需要删除的commit。该方案会产生一些来回的commit ,但是是最保险的

在使用git revert 之后会产生一个类型关联的commit ,类似如下图

    Revert "add filed IsAgentSelfCustomer"

    This reverts commit 6959f3508067e10d17a7a8a896fc4171cec67110.

此时如果需要再次执行merge ,将p merge 到dev,会发现Already up to date. 即该commit 已经存在,事实也是的确存在了(之前的commit 并未删除)

所以要么合并 revert 记录,要么重新在p 分支修改commit ,再merge

 类似资料: