[master] ... 0 - (1) - (m1) - 2 - (3) - 4
\
[develop] 5 - 6 - 7
说明: 带括号的都是错误的commit,m1是merge提交,每个数字代表commit和commit号 需要放到develop分支
我的做法(目前看来没问题,不确定是否正确):
git checkout master
git pull
git diff 0 1 > patch1 (这两步的主要想法是物理备份一下,万一改乱了,还有个修改记录)
git diff 2 3 > patch2
git revert m1 -m 2 (这样直接会将1 和 m1产生修改的所有文件反转)
git revert 3
此时,分支状态是:
[master] ... 0 - (1) - (m1) - 2 - (3) - 4 - rm1 - r3
\
[develop] 5 - 6 - 7
然后将错误提交应用到develop上
git checkout develop
git pull
git cherry-pick 1
git cherry pick 3
(进入merge按照提示解决、继续)
此时分支状态是:
[master] ... 0 - (1) - (m1) - 2 - (3) - 4 - rm1 - r3
\
[develop] 5 - 1 - 6 - 7 - 3 (这里看commit的时间,进行的排序)
以上是大概记录
参考资料:
来源:oschina
链接:https://my.oschina.net/u/2421222/blog/1631507