场景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