无需退回历史记录,如何撤销意外的git合并?

6

我犯了一个愚蠢的错误,不小心将一个主题分支合并到我的主分支中,并将其推送到github上(其他人已经拉取)。为确保这是一个完全愚蠢的错误,我将其从生产服务器中删除。

我已经适当地低头羞耻了一段时间,现在我需要想办法有效地回滚代码提交,并继续提交历史记录。

为了让我的生产代码正确检出,我运行了git checkout hashoflettersandnumbers,这就是我想要生产HEAD的提交。

我运行git reset hashoflettersandnumbers,然后运行git clean以删除该提交之后的更改,但我似乎无法将该代码设置为主分支的HEAD并进行新的提交。


+1 是指“确保这是一个非常愚蠢的错误”。[我最近犯的]悲惨错误,希望能有同伴。 - ruffin
1个回答

5

使用git revert命令在每个分支上执行。这将创建一个新的提交,永久保留您的错误,但会将树恢复到合并之前的状态。

例如,如果123456是合并提交...

$ git checkout master
$ git revert 123456
$ git checkout topic-branch
$ git revert 123456

这假设这不是一个“快进”合并。

1
感谢@dietrich。为了下次在谷歌搜索时方便自己参考,最安全且最直观的方法是逐个提交地返回到一个稳定的提交点,并使用标志--no-commit来避免回退时一个一个地提交。同时,对于合并提交,请使用-m 1选项。 - brycemcd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接