1. 问题过程
将已开发好的功能合并到master
上线后发现有问题咋整、直接revert掉刚才的那次merge,也就是revert掉①那个点
revert 的过程是将你合并的那个分支的所有改动,全部删除重新commit (覆盖)②,记住是commit,并不是撤销了你的合并和提交
然后继续在Feat-x 分支解决你的bug,其它同事继续往master提交(③④),
这时候你解决了Bug打算再次合并⑤、发现和master没有diff了,急的你想各种骚操作。
从master重新开一个分支、然后将Feat-x分支合并到新分支然后merge master,发现没有diff
不可行
从Feat-x 重新开个分支合并到master
不可行
在master分支重新开个分支,将Feat-x分支改动的文件和代码复制到新分支,重新commit、然后merge到master `这种方式是没问题的,但是如果代码量很多,你慌不慌?
分析到3会发现、如果重新commit能解决问题,但是有什么办法不通过手动复制粘贴来解决呢。
解决过程
1.在master新开一个分支 -> 2.revert掉一个第一次revert的那个点(就是反向revert) -> 3.开始解决冲突(因为第一次revert后面可能会有别人的提交) -> 4.commit -> 5.将 Feat-x merge 过来 -> 重新发起对master的merge
关键第二步的操作
git revert --no-commit 第一次revert的那个点的commit id
总结
正确使用revert能减少回滚代码的代价,但是还是需要了解revert究竟做了哪些工作。