从失败的rebase中恢复

时间:2011-01-11 17:26:21

标签: git git-svn rebase

我正在使用git svn来获得公司授权的svn服务器的git goodness。我只是有一个可怕的错误,我正试图找出恢复的最好方法。

以下是发生的事情:

  1. 首先,我有这个

    ---1 (master)
        \--B--C--D--E (feature/fix-widgets)
    
  2. 然后我在master上执行了git checkout master然后git svn rebase来提取这些提交。我没想到我的功能分支和主人之间有任何冲突,因为更改是在一个完全不同的文件夹中。所以在这一点上,我想我有这个:

    ---1--2--3--4 (master)
        \--B--C--D--E (feature/fix-widgets)
    

    从{svn。

  3. 提交1--2--3--4提交的地方
  4. 接下来,我git checkout feature/fix-widgets然后git rebase master。有一些冲突,有些事情没有加起来,所以我决定撇开并更仔细地看待事情。我做git rebase --abort,希望这能使我恢复到变形前的状态。

  5. git rebase --abort并收到以下消息

    $ git rebase --abort
      error: git checkout-index: unable to create file somedir/somefile.cs (Permission denied)
      fatal: Could not reset index file to revision 'be44daa05be39f6dd0d602486a598b63b6bd2af7'.
    
  6. 现在我不知道该怎么做。 git status显示我在feature/fix-widgets,但我有一大堆阶段性更改,以及之前提交的大量未跟踪文件。如果我能回来E,我会没事的。

1 个答案:

答案 0 :(得分:27)

您应该查看 ORIG_HEAD

  

ORIG_HEAD以前的HEAD状态,由具有可能危险行为的命令设置,以便于将其还原。
  现在Git有reflog它不太有用:HEAD@{1}大致相当于ORIG_HEADHEAD@{1}始终是HEAD的最后一个值,ORIG_HEAD是最后一个值在危险操作之前HEAD

所以试试这个git reset再回到任何变种之前:

git reset --hard ORIG_HEAD