【问题标题】:How to undo last local commits in Git and go back to the remote state?如何撤消 Git 中的最后一次本地提交并返回远程状态?
【发布时间】:2017-10-03 16:47:33
【问题描述】:

我将一个远程分支合并到我的本地存储库中,它创建了 26 个本地提交。

现在,我想恢复此合并,但它认为将提交 1 恢复为 1 或寻求远程版本的最后一次提交以恢复它是非常无聊且容易出错的。

我浏览了 How to undo last commit(s) in Git? 的帖子,它的答案非常有趣,但我没有找到任何简单的方法来进行本地还原。

有人可以帮忙吗?

【问题讨论】:

    标签: git merge git-remote revert


    【解决方案1】:

    使用 Git 日志和 Git 重置

    git log
    

    这将为您提供带有消息的提交 ID,您可以通过该消息识别您的提交 ID。

    使用提交 ID 然后重置。

    git reset <commit-id>
    

    如果您永久想要返回该提交。您可以使用以下内容。

    git reset --hard <commit-id>
    

    【讨论】:

    • 您可以重置为分支提示,因此您可以执行git reset --hard origin/master 重置回您上次与该远程通话时在您的原始远程上的任何主机。
    • @LasseV.Karlsen 假设 origin/master 具有相同的提交 id 可能是无效的,因为 OP 没有提到 origin/master 和本地分支是同步的。跨度>
    • 好的,但我正在寻找不使用 commid id 的解决方案,当我合并 我的本地分支时,我的目的是回到远程状态这个确切的分支。所以感谢@Lasse V. Karlsen @"Lasse V. Karlsen"
    • 我发现了另一种“棘手”的解决方案,它似乎接近@Lasse V. Karlsen 的一个(见我自己的答案),但 Lasse 的解决方案要简单得多!再次感谢
    【解决方案2】:

    我尝试了一两件事情,这件有点脏,但它很简单而且似乎有效:

    • 结帐到另一个分支(如果没有,则创建一个):git checkout -b tempo
    • 删除错误的本地分支:git branch -D dirty_one
    • 重新创建与远程同步的本地分支:git checkout -b dirty_one origin/dirty_one

    仅此而已。

    我认为糟糕的地方是错误的本地提交仍在本地 repo 中,但分支不知道它们,因此它们可能仍然隐藏。

    如果我重做我的合并(实际上我已经这样做了),合并工作得很好,但我不知道具体如何(脏部分......)

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2016-09-22
      • 2010-10-29
      相关资源
      最近更新 更多