【问题标题】:Undo git merge (and push to heroku)撤消 git merge(并推送到 heroku)
【发布时间】:2012-11-08 04:45:58
【问题描述】:

这个问题已经问了太多次了,但我没有找到解决我的情况的方法,所以会再问一次。我有 2 个分支机构 - 主人和居民。我已经在居民身上工作了大约 2 个月,基本上是对表单的完全重新设计(大量的复选框、单选按钮等以避免打字)。大约 35 次提交。几次左右,我对主人做了一些小的改动,并将主人合并到居民中。然后当我对居民感到满意时,我切换到master,将居民合并到其中并推送到heroku。

该应用程序(实际上是包含一些 JS 的表单)在 heroku 上不起作用(它在我的本地上起作用)。我回滚了heroku,现在我需要将应用程序恢复到合并和推送之前的状态。我有居民分支,所以我只需要从 master 丢弃整个合并。

我认为这应该是一个简单的撤消操作,但我不知道如何操作。

感谢您的帮助。

【问题讨论】:

    标签: git heroku merge push undo


    【解决方案1】:

    我认为你可以重置合并然后再次推送。

    git reset --merge :重置索引并更新工作树中与 HEAD 之间不同的文件,但保留索引和工作树之间不同的文件(即具有尚未添加的更改)。如果与索引不同的文件有未暂存的更改,则会中止重置。

    http://git-scm.com/docs/git-reset

    【讨论】:

      【解决方案2】:

      假设 master 中的最新提交是您的常驻分支的合并,并且您没有与其他人共享您的应用程序,您可以这样做:

      git reset --hard HEAD~1
      

      该命令说回滚到前一个父级。然后你需要做:

      git push --force
      

      您也可以使用git revert 来执行此操作,但这也带来了一些额外的复杂性。您将不得不恢复合并提交,稍后,当您想要恢复分支时,您将恢复您的恢复,然后合并分支。否则,所有的修订都不会过来。在这种情况下,我赞成修改历史记录,这就是我在上面向您展示的内容,因为当您可以接受它时,它会更简单、更干净。

      【讨论】:

      • 在我发现应用程序没有在 heroku 上运行后,我运行了 $ git reset --hard [在居民中完成的最后一次提交的 SHA,合并到主服务器中]。我认为那是我正在寻找的撤消。它根本没有撤消合并。它丢弃了最后一次提交(在居民身上完成的大约 35 次提交并合并到主节点中)。因此,此时我的主人几乎与居民相同,它与居民的区别仅在于最后一次提交(已被上述撤消)。我需要摆脱所有在居民中完成的提交并合并到主人中。
      • 我不确定我是否正确解析了您的第一句话,或者那里可能有错误。你想git reset --hard 到你想回退到的提交。如果合并是快进合并,那么这些合并更难恢复,因为历史看起来好像是在 master 分支上开发的。你有以前版本的标签吗?你知道master最新版本的SHA1吗?如果是这样,请将其用于主服务器上的git reset --hard
      • 是的,我们有误会。看起来你的意思是“HEAD~1”字面意思。是的,我知道所有版本的 SHA1($ git log)。我想避免将 --hard 重置为特定的 SHA1,因为我认为我会丢失对 master 中所做的少数提交并合并到居民中的跟踪(它们必须手动“转移”回 master 中?)。我没有任何标签。有什么要学用的?如果我有标签,现在会有帮助吗?有没有办法将 repo 恢复到合并前的状态?这是我认为很简单的事情,这就是我继续合并的原因。
      • 是的,这应该很容易,但面对快进合并,事情会变得更加困难。您可以查看的一件事是 master 上的 reflog。它向您展示了 HEAD 所采取的价值观。如果您可以找到合并到 master 发生的位置,那么您可以找到哪个提交 master 并确保您没有丢失任何东西。 git reflog 可能有点难以阅读,但您需要的信息就在其中。这里也是useful reference on reflog
      • 还有一件事。您可以考虑与--no-ff 进行合并,以便始终存在合并提交。您还可以将 merge.ff 设置为 false。您可以使用git config merge.ff false 全局设置它。
      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2011-08-22
      • 2012-09-27
      • 2011-01-24
      相关资源
      最近更新 更多