具体问题是什么?
解决方法
- 第一步:把错误的commit遴选到正确的分支(copy)
- 第二步:因为遴选的背后是copy,所以还需要删除掉错误分支上的commit;
操作步骤:
- 切换到feature_a分支
-
选中提交错的commit节点,右键进行遴选即可(如果不修改commit信息的话可以在后面的提示中直接同意自动commit)
-
操作结果如下:
- 因为commit是copy的,所以我们还需要把feature_b分支中的那个commit删除掉
- 切换到feature_b分支
-
选中要删除的commit节点的前一个节点,执行「重置」操纵,如下图:
-
在弹出的框中,我们这样选择先
-
我们可以看到,虽然commit被删除了,但其实改动还在,我们只需要丢失本地改动就好了
-
刚才其实还有其他选项,比如选择「强行合并」,那么那个commit直接就被丢弃了,不会像刚才那样,产生Uncommitted changes,还需要手动丢弃改动
- 其实还有一种选项,叫「软合并」,这种介于「混合合并」和「强行合并」中间,即:改动还在,但你改动被
git add .
了
「软合并」效果如下:
- 以上操作(各种reset),如果一开始已经push到remote了,还需要
git push --force
-
其实还有一种操作,叫做「提交回滚」,通过revert来实现的
-
操作结果如下,是通过一次新的commit来把错误的commit抹掉