我只是试图将一个非常古老的分支重新修改为我的主人。 合并三个文件中只有一个存在问题,所以我做了一个不假思索的--skip,认为它只会跳过那个文件,但是当它发生时,它似乎已经跳过了我所有的更改,并向前滚动。所以现在rebase已经完成,我的变化似乎已经消失了。
我已经看到了关于undoing rebase的问题,但这对我来说都是希腊语,我看到了reflog,但我不知道在rebase之前哪个分支附加了。
在任何情况下,我都不需要撤消rebase,我只想恢复两个文件中的更改。无论如何都要正确地做到这一点(如果没有这个,我只需要恢复我昨天的存储库备份并手动选择这些位。)
答案 0 :(得分:44)
首先,为你的git工作文件夹制作一个tarball。这样可以更容易地多次尝试。
让我们假设发生了以下情况
此时您现在仍处于另一个旧分支中,您的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,所以我们现在要做的是
现在您的分支恢复正常。你可以重试你的基础。
请注意,您的reflog现在比上面的例子稍微复杂一点。但它应该在某处... ...
祝你好运!