在重新绑定期间从无意跳过恢复

我只是试图通过对我的主人进行小修改来重建一个非常古老的分支。 合并涉及的三个文件中的一个时出现问题,所以我做了一个不假思索的 - 跳过,认为它只是跳过该文件,但正如它发生的那样,它似乎跳过了我所做的所有更改并向前滚动。 所以现在rebase已经完成了,我的改变似乎已经消失了。

我已经看到了关于取消rebase的问题,但是对我来说这都是希腊人,我看到了reflog,但我不知道分支在rebase之前被附加到哪个提交。

无论如何,我并不需要撤消rebase,我只想恢复两个文件中的更改。 无论如何要正确地做到这一点(如果没有这样做,我只需要恢复昨天备份的存储库并手动选取数据)。


首先,制作一个git工作文件夹的tarball。 这使得它可以多次尝试。

让我们假设发生了以下事情

  • git checkout another-old-branch
  • git rebase master
  • 一些问题(你跳过了)
  • 在这一点上,你现在仍然在另一个旧分支,你的reflog显示你:

    6f8348f HEAD@{0}: rebase: <commit message of last commit in another-old-branch>
    e547ec0 HEAD@{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0
    65cedf8 HEAD@{2}: checkout: moving from master to another-old-branch
    

    想象一下,分支就像符号链接(或指针),我们所要做的就是让分支的另一个旧分支指向旧的提交标识。 旧的提交仍然存在,并且它没有被你的rebase所触及。 有点:'嘿混帐,另一个老分支是e547ec0d2,忘记发生的一切'

    在我们的例子中,这是e547ec0d2a558d189464fc57192066b34ec5f28f,所以我们现在要做的是

  • git checkout another-old-branch#如果你还没有在那里
  • git reset --hard e547ec0d2a558d189464fc57192066b34ec5f28f
  • 现在你的分支恢复了正常。 你可以重试你的rebase。

    请注意,您的reflog现在比上面的示例稍微复杂一些。 但它应该停留在某个地方......

    祝你好运!

    链接地址: http://www.djcxy.com/p/23543.html

    上一篇: Recover from inadvertent skip during rebase

    下一篇: How to combine group of local commits to single push in IDEA?