刚摸完鱼回到工位,准备美滋滋提交个小功能,结果手一抖 —— 好家伙,把还在开发中的分支直接合并到 master 分支了!看着终端里那行 “Merge made by the 'recursive' strategy”,我的心瞬间凉了半截,脑子里只有一个念头:完了,这要是被测试小姐姐看到,不得追着我打?
不过慌归慌,解决问题才是正经事。其实 git 早就给我们准备了 “后悔药”,几步就能把 master 分支恢复到正常状态,今天就把这个保命小技巧分享给和我一样偶尔手滑的小伙伴~
第一步:找到 “肇事” 的合并记录
首先得找到刚才那波错误合并的提交记录,打开终端敲一行:
bash
运行
git log
执行后会看到一串提交记录,每条记录都有长长的哈希值(hash 码),还有提交信息。重点找开头带 “Merge: xxx xxx” 的那一条,这就是刚才误合并产生的记录,把它对应的哈希码复制下来(不用全复制,前 7 位左右就够用)。
第二步:用 revert 撤销合并操作
这是最关键的一步,终端里输入:
bash
运行
git revert -m 1 你复制的hash码
这里解释下-m 1是啥意思:合并提交会有两个父分支,-m 1表示我们要保留第一个父分支(也就是 master 分支原本的状态),撤销掉合并进来的开发分支内容。
执行完这条命令后,git 会自动打开编辑器让你编辑提交记录(一般是 vim 编辑器),不用改啥,直接保存退出就行 —— 按一下Esc,输入:wq回车,搞定。
第三步:把回退结果推到远程
最后一步,把本地的回退操作同步到远程 master 分支,敲:
bash
运行
git push origin master
等终端显示 “Everything up-to-date”,就说明远程 master 已经恢复到合并前的状态了,刚才的 “手滑事故” 完美收尾~
小碎碎念
其实 git 的回退方法不止这一种,但git revert是最安全的 —— 它不会删除历史记录,只是新增一个撤销提交,就算是已经推到远程的分支也能放心用,不像git reset容易搞丢记录、还可能影响同事。
下次再不小心手滑合并错分支,别慌也别删库跑路,按这三步走,5 分钟就能把 master 救回来~当然啦,最好还是合并前多瞅一眼分支名,毕竟 “不犯错” 才是最高效的嘛😜
总结
- 回退误合并的 master 分支核心用
git revert -m 1 [hash码],安全且不丢失历史记录; - 操作步骤:
git log找合并记录 hash →git revert -m 1撤销 → 保存提交记录 →git push推到远程; git revert -m 1中-m 1代表保留 master 原分支状态,是合并提交回退的关键参数。