In Git, come esegui il rollback di un rebase se non sei soddisfatto?
Git non ha run a secco per rebase. Se ho fatto un rebase e non l'ho ancora inviato, come faccio a tornare indietro a prima, come se non fosse mai successo?
In Git, come esegui il rollback di un rebase se non sei soddisfatto?
Git non ha run a secco per rebase. Se ho fatto un rebase e non l'ho ancora inviato, come faccio a tornare indietro a prima, come se non fosse mai successo?
Risposte:
Puoi usare il reflog per trovare la prima azione prima che il rebase inizi e poi resettare --hard torna ad essa. per esempio
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Ora dovresti tornare a prima dell'inizio del rebase.
Per trovare il posto giusto in cui reimpostare, seleziona la voce più vicina all'inizio che non inizia con "rebase".
Se il rebase è l' unica cosa che hai fatto sul ramo, cioè non hai commit / modifiche non premuti - allora potresti semplicemente eliminare il ramo locale con git branch -D
e poi controllarlo di nuovo:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
Oppure, per lo stesso effetto, puoi reimpostare --hard al ramo di origine:
$ git reset --hard origin/my-branch
Se lo hai fatto mentre avevi altri commit non premuti, li avrai persi. In tal caso, usa semplicemente l'approccio reflog sopra per tornare alla voce reflog dove hai fatto il commit (i).
ORIG_HEAD
il valore hash originale del ramo che viene ribasato. Quindi, invece di trovare il numero 2 per HEAD@{2}
, puoi semplicemente usare ORIG_HEAD
... ma solo se ORIG_HEAD
è ancora indisturbato. Un sacco di comandi Git lo impostano (rebase, am, reset e merge, in varie circostanze).
Rebase mantiene un backup del vecchio stato come ORIG_HEAD
.
Quindi puoi ripristinare l'ultimo rebase eseguendo:
git reset --hard ORIG_HEAD