2011-01-11 15 views
19

Sto usando git svn per ottenere un po 'di bontà con il server svn mandato dalla società. Ho appena avuto un rebase andare terribilmente storto, ed io "m cercando di capire il modo migliore per recuperareRipristino da una rebase fallita

Ecco cosa è successo:.

  1. Per cominciare, ho avuto questa

    ---1 (master) 
        \--B--C--D--E (feature/fix-widgets) 
    
  2. Quindi ho fatto git checkout master e poi git svn rebase sul master per abbattere quelle commit.Non ho previsto alcun conflitto tra il mio ramo di funzionalità e il master, perché le modifiche erano in una cartella completamente diversa.Quindi, a questo punto, penso Ho questo:

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

    Dove 1--2--3--4 sono impegna tirato da SVN.

  3. Successivamente faccio git checkout feature/fix-widgets e quindi git rebase master. C'è immediatamente un conflitto e alcune cose che non si sommano, quindi decido di sgattaiolare via e guardare le cose con più attenzione. Lo faccio git rebase --abort, sperando che questo mi ripristini dove ero prima del rebase.

  4. faccio git rebase --abort e ricevo il seguente messaggio

    $ 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. Ora io non sono sicuro di cosa fare. git status indica che sono nello stato feature/fix-widgets, ma ho modificato un intero gruppo di staged e un numero elevato di file non tracciati, precedentemente impegnati. Sarei a posto se potessi tornare E.

+1

ho incontrato questo stesso tema di oggi - sto cercando di indovinare che si stava utilizzando git su Windows, il sistema operativo bello che pensava che condividono le serrature fosse una buona idea. La mia ipotesi è che il motivo per cui si è soffocato su somedir/somefile.cs era che era aperto da qualche parte ... questa era la causa della mia rebase fallita. La chiusura di tutti i programmi aperti che ho trovato, reimpostando in base alla risposta scelta, quindi rebasing, ha funzionato senza problemi. –

+0

+1 per una domanda ben scritta che mi ha salvato dal piangere. – Tinman

risposta

25

Si dovrebbe avere uno sguardo a ORIG_HEAD

ORIG_HEAD è stato precedente di HEAD, fissato dal comandi che hanno un comportamento potenzialmente pericoloso, per essere facile da ripristinare loro.
È meno utile ora che Git ha reflog: [email protected]{1} è grosso modo equivalente a ORIG_HEAD ([email protected]{1} è sempre ultimo valore di HEAD, ORIG_HEAD è l'ultimo valore di HEAD prima operazione pericolosa)

Quindi provare questo git reset di tornare a prima di ogni rebase:

git reset --hard ORIG_HEAD 
+0

Beh, è ​​stato facile. Ho fatto un reset, e poi ho semplicemente cercato di rebase di nuovo, e ha funzionato. * shrug * – notJim

+0

@notJim: true, ma può essere utile tenere a mente 'ORIG_HEAD' quando si eseguono questi comandi. Può tornare utile. – VonC