git,如何 撤销某一次历史提交或merge,并保留该版本的后续提交?

场景1:

  你有两个功能迭代版本的分支,一个是 15 号上线,一个是25号上线。5号的时候产品突然说,这两个版本一起上,然后你耿直的把25号版本merge到了15号版本。

几天后产品说:“一起上有问题,我们还是分开上吧”。这个时候你发现merge之后又提交了很多15号版本的代码,需要撤销那次merge并且保留后面的提交。

场景2:

  所有人共用 test 分支,有五个人都在这上面合并了自己的代码,结果有天 A 不小心把 develop 分支合并到了 test,过了一会 A 发现,并且想撤回的时候,发现再次期间,有好几个人都提交了代码。所以不能用reset,而是需要撤销merge并且保留后面更改。

有两种办法:

一、git rebase 变基

git log 找到那个merge的commitId

git rebase -i commitID   

将这个commitID前面的pick改为d   

保存并退出   

如果冲突,先解决然后 git rebase --continue

如果想撤销整个操作 git rebase --abort

多人协作时,不要用变基,commit 会造成混乱,出现很多两次的commit 信息

二、git revert

git revert -m 1 commitId

原文地址:https://www.cnblogs.com/ly0612/p/12593897.html