git merge --abort
使用场景:如果两个分支 merge 时出现了冲突,临时打算取消 merge
git reset --hard head^
使用场景:如果仅仅是在本地完成了 merge 后想要撤回,可以直接将分支挪回 merge 之前的 commit
推送到远程仓库之后想要撤回
比如说,release 分支进行 QA 测试,测试通过之后会合并到 master 分支,准备进行预发布测试和上线
虽然此时你的仓库的代码都合并到了 master,但是由于服务 A 依赖于其他团队开发的服务 B,而且往往是在不同的仓库里的两个项目。负责服务 B 的小组突然发现在 QA 环境临时测试出来了一个大 bug,此时 pm 沟通了一下,评估了一下风险,决定今天取消上线,下周再上。
你的代码都合并到 master 分支了但是说不上线了,此时你是不能将不准备上线的代码留在 master 分支里的。因为如果你有其他需求在最近一两天也要上线,那也是要合并到 master 分支,如果那个需求要上线的话,master 分支会把你的那个不准备上线的功能的代码给带上线。这种情况是不能接受的!必须将本次 merge 的代码给撤回,无论是本地的还是远程的。
如果 push 到了远程仓库以后是不能在本地 reset 一下后再 push 的,因为那样会搞乱提交历史
比如此时的工作区代码如下: