2011-01-11 236 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