2011-01-11 245 views
19

我使用git svn来获得一些git善良与公司强制svn服务器。我刚刚有了一个底垫中去可怕出差错,我“米试图找出最佳恢复方式从失败的rebase恢复

这里发生了什么:

  1. 首先,我有这个

    ---1 (master) 
        \--B--C--D--E (feature/fix-widgets) 
    
  2. 然后我做了git checkout master然后git svn rebase在master上拉下了这些提交。我没有预料到我的特性分支和master之间有任何冲突,因为这些更改都在一个完全不同的文件夹中。我有这个:

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

    其中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'. 
    
  5. 现在我不知道该怎么办。 git status表明我在feature/fix-widgets上,但是我有一大堆的上演变更,以及之前提交的大量未跟踪文件。我会很好,如果我可以回E

+1

我今天遇到这个非常相同的问题 - 我猜你在Windows上使用git,那个可爱的操作系统,认为共享锁是一个好主意。我的猜测是,它在somedir/somefile.cs上窒息的原因是它在某处开放......这是我失败的rebase的原因。关闭所有我能找到的开放程序,根据选定的答案进行重置,然后重新绑定,工作没有问题。 – 2012-08-20 19:59:13

+0

对于写得很好的问题,让我免于哭泣。 – Tinman 2013-06-27 07:29:20

回答

25

你应该看看ORIG_HEAD

ORIG_HEADHEAD以前的状态,由有可能是危险的行为指令集,很容易恢复它们。
现在用处不大了Git已经引用日志:[email protected]{1}大致相当于ORIG_HEAD[email protected]{1}始终是HEAD最后一个值,ORIG_HEAD是危险的操作之前的HEAD最后一个值)

那么试试这个git reset找回到任何rebase之前:

git reset --hard ORIG_HEAD