在rebase期间从无意跳过中恢复

时间:2010-03-12 09:05:42

标签: git rebase

我只是试图将一个非常古老的分支重新修改为我的主人。 合并三个文件中只有一个存在问题,所以我做了一个不假思索的--skip,认为它只会跳过那个文件,但是当它发生时,它似乎已经跳过了我所有的更改,并向前滚动。所以现在rebase已经完成,我的变化似乎已经消失了。

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

在任何情况下,我都不需要撤消rebase,我只想恢复两个文件中的更改。无论如何都要正确地做到这一点(如果没有这个,我只需要恢复我昨天的存储库备份并手动选择这些位。)

1 个答案:

答案 0 :(得分:44)

首先,为你的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

想象一下,分支就像符号链接(或指针),我们所要做的就是让分支'another-old-branch'指向旧的commit-id。旧的提交仍然存在,并且你的rebase没有触及它。有点:'嘿git,另一个老分支是e547ec0d2,忘记发生的其他事情'

在我们这里的情况是e547ec0d2a558d189464fc57192066b34ec5f28f,所以我们现在要做的是

  • git checkout另一个旧分支#如果你还没有
  • git reset --hard e547ec0d2a558d189464fc57192066b34ec5f28f

现在您的分支恢复正常。你可以重试你的基础。

请注意,您的reflog现在比上面的例子稍微复杂一点。但它应该在某处... ...

祝你好运!

相关问题