git merge 问题求教

同事不小心把 dev 分支 merge 到自己的开发分支了,这样就导致自己的开发分支上出现了 dev 分支上所有的提交记录。
现在开发分支上的提交记录中,糅合了 dev 分支上所有的 commit,而且不是连续的,这样感觉就不能使用 reset 之类的操作回退到某个版本。
现在想要撤销这次 merge,把自己分支上的代码和提交历史恢复到 merge 之前的样子,大哥们,请问这种情况该怎么解决呀?:joy:
目前想到的最直接的操作就是把开发分支给删了,重新来一遍

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
  1. 如果没有推送到远程,直接删除本地分支,重新拉取远程分支
  2. 如果已经推送,找到自己最后一次提交,git reset <HASH> --hard

补充:

想要深入了解可以看下官方的两篇文章(中文呦~):
2.4 Git 基础 - 撤消操作
7.7 Git 工具 - 重置揭密

2年前 评论
qingshui (楼主) 2年前
Su 2年前
qingshui (楼主) 2年前
讨论数量: 12
  1. 如果没有推送到远程,直接删除本地分支,重新拉取远程分支
  2. 如果已经推送,找到自己最后一次提交,git reset <HASH> --hard

补充:

想要深入了解可以看下官方的两篇文章(中文呦~):
2.4 Git 基础 - 撤消操作
7.7 Git 工具 - 重置揭密

2年前 评论
qingshui (楼主) 2年前
Su 2年前
qingshui (楼主) 2年前

首先你需要找到那次 merge 操作对应的提交记录,你可以使用 git log 命令查看提交历史,假设你的这次 merge 操作对应的提交记录是 b98b8f3,可以执行下面这条命令:

git revert ^b98b8f3
2年前 评论
qingshui (楼主) 2年前
Lion- (作者) 2年前
qingshui (楼主) 2年前

要分情况,如果你是使用的 rebase 模式,那就可以直接 reset 到你自己的提交位置,就可以。

如果使用的 merge 模式,那执行 revert merging 的那个 commit 加上 -m 1,回退掉这次 merge 就可以。

可以参考这个:git - How do I revert a merge commit that has already been pushed to remote? - Stack Overflow

2年前 评论
qingshui (楼主) 2年前

git reset --hard commitid

直接覆盖到指定的提交id

2年前 评论
qingshui (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!