2010-05-24 19 views
13

Ho fuso la strada sbagliata tra due rami. Ho quindi eseguito quanto segue:Git annulla ultimo commit

git reset --hard HEAD^ 

Sono tornato al commit precedente (che è dove voglio essere). Era la cosa giusta da fare?

Il commit errato è ancora nel repository, va bene o devo fare qualcos'altro per rimuoverlo dal repository?

Non ho ancora spinto o impegnato altro.

+0

ai posteri, si potrebbe desiderare di correggere il vostro comando. Era 'git reset ...', non 'git commit ...'. –

+0

Whoops, grazie per averlo indicato. – Justin

risposta

15

Questa è la cosa giusta da fare.

È possibile eseguire uno git gc in commit di raccolta disconnessa, ma non è necessario.

+6

Beh, ci vorranno 90 giorni prima che 'git gc' rimuova quel commit. I commit raggiungibili dal count di reflog sono raggiungibili e il reflog impiega 90 giorni per scadere (per impostazione predefinita). Ma il succo della risposta è giusta: git di guardare fuori per voi, cercando di non eliminare definitivamente qualsiasi cosa, per ogni evenienza. – Cascabel

+0

Grazie James e Jefromi. – Justin

+0

@Jefromi: Inchiodato. Cerco di non suggerire 'gc' alle persone, perché riguarda l'unica operazione non reversibile in git. –

0

mmmm ... git revert può essere è quello che ti serve

anche this articolo potrebbe aiutare.

+0

Grazie, ma non ho voglia di generare un'inversione commesso. – Justin

1

L'utilizzo di ^ con HEAD^ non ha funzionato per me. Invece ho dovuto usare il riferimento da: http://gitref.org/basic/#commit

git ripristinare HEAD --soft ~

(git version 1.7.12.4 (Apple Git-37))

(Nota: se si utilizza zsh (come faccio io) si può anche sfuggire il carattere ^ invece di comando alternativo ho dato sopra)

+2

Stai usando zsh? Se siete avete bisogno di sfuggire alle^ – Justin

+0

Grazie: D Io sono. che strana avvertenza – electblake