从失败的rebase中恢复

dav*_*nal 21 git git-svn rebase

我正在使用git svn公司强制的svn服务器获得一些git goodness.我刚刚变得非常糟糕,我正试图找出最好的恢复方法.

这是发生的事情:

  1. 首先,我有这个

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

    ---1--2--3--4 (master)
        \--B--C--D--E (feature/fix-widgets)
    
    Run Code Online (Sandbox Code Playgroud)

    1--2--3--4从svn提交的提交在哪里.

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

  4. 我这样做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'.
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在我不知道该怎么做.git status表明我已经开启了feature/fix-widgets,但是我有一大堆阶段性的更改,以及之前提交的大量未跟踪文件.如果我能回来,我会没事的E.

Von*_*onC 27

你应该看看 ORIG_HEAD

ORIG_HEADHEAD由具有可能危险行为的命令设置的先前状态,以便于还原它们.
现在Git有reflog它没那么有用:HEAD@{1}大致相当于ORIG_HEAD(HEAD@{1}总是最后一个值HEAD,ORIG_HEADHEAD危险操作之前的最后一个值)

所以尝试这个git reset在任何rebase之前回到:

git reset --hard ORIG_HEAD   
Run Code Online (Sandbox Code Playgroud)