【问题标题】:undoing accidental git merge without regressing history在不回归历史的情况下撤消意外的 git 合并
【发布时间】:2011-05-17 01:54:16
【问题描述】:

我做了一些愚蠢的事情,不小心将一个主题分支合并到我的主分支中,然后将其实时推送到 github(其他人已经拉到的地方)。为了确保这是一个完全愚蠢的错误,我将它拉到我的生产服务器上。

我已经羞愧地低下了头适当的时间,现在我需要弄清楚如何在推进提交历史的同时有效地回滚代码提交。

为了让我的生产代码正确结帐,我运行了git checkout hashoflettersandnumbers,这就是我希望生产 HEAD 成为的提交。

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

【问题讨论】:

  • +1 表示“确定这是一个完全愚蠢的错误”。 [我最近] 苦难爱陪伴。

标签: git


【解决方案1】:

在每个分支上使用git revert。这将创建一个新的提交,它会永远保留您的错误,但会返回与合并前相同的树。

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

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

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

【讨论】:

  • 感谢@dietrich。作为我自己下次谷歌时的参考,最安全,最直观的是回到稳定的提交,一次提交一次并使用标志 --no-commit 来防止一次提交一次打了退堂鼓。此外,使用 -m 1 进行合并提交。
猜你喜欢
  • 2015-01-15
  • 2016-09-04
  • 2011-07-20
  • 2015-04-05
  • 2014-10-21
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多