2012-01-17 9 views
7

Ho commesso un errore in uno dei commit. Ora voglio eliminare completamente questo commit, quindi sembra che non sia mai esistito. Non voglio vederlo nel registro.Come cancellare un 'git commit' da LOG, come se non fosse mai esistito

Ho provato tutti i suggerimenti da this question ("How to delete a 'git commit'"), ma posso vedere il commit nel registro. Come posso eliminarlo completamente?

- Modifica -

Ok, non me ne frega del tutto informazioni. Kevin Ballard sono corretti.

A questo punto, non spingo questo commit, è solo nella mia macchina. Il ouah risposta di lavoro, il comando

git log 

non mostrerà, ma quello che il comando

git reset --hard HEAD^ 

fare è "chekout ultima commesso e cambiare il ramo a questo", così io continuo a vedere che si impegnano con un programma grafico come SmartGit.

--edit 2--

No, questo è un bug SmartGit !!!! L'impegno scompare davvero. Devo chiudere le finestre del registro e poi aprirlo di nuovo. Il commit non c'è più.

+0

Potrei sbagliarmi, ma penso che non puoi. – zneak

+0

@zneak: È possibile, ma Rodrigo ha bisogno di dare maggiori informazioni. Questo impegno è stato spinto ovunque? Ti interessa cancellare tutte le informazioni su questo commit e i suoi file dal disco, o è giusto accertarsi che non venga visualizzato in 'git log' (e può essere raccolto in modo naturale in qualche momento successivo) ? –

+0

Prova i suggerimenti in questo http://stackoverflow.com/questions/927358/git-undo-last-commit – Shraddha

risposta

10

Se è l'ultimo commit

git reset --hard HEAD^ 

se non è l'ultima commettere

git rebase -i commit_hash^ 

si aprirà un editor, cancellare l'intera linea con l'impegno, salvare e uscire.

noti che riscrivere la storia o rebasing se il ramo è già stato spinto di solito è una cattiva idea e si può preferire usare

git revert commit_hash 

che aggiungerà un nuovo commit che ritorna il commit commit_hash.

+2

Se stai provando a rimuovere un singolo commit, puoi anche usare semplicemente 'git rebase --onto $ SHA1^$ SHA1' (dove '$ SHA1' è il commit da eliminare). Inoltre, questo viene fornito con l'avvertenza che non riprodurrà le unioni. Puoi assegnargli il flag '-p' per provare a riprodurre le unioni, ma potrebbe non funzionare correttamente se il commit che hai eliminato ha un impatto su qualsiasi risoluzione di unione.Si noti inoltre che mescolare '-p' con' -i' è una cattiva idea (si veda la sezione BUGS nella manpage git-rebase). –

+0

@ouah dovresti probabilmente dirlo che se il ramo è stato premuto, allora questa è una IDEA CATTIVA. – Richard

+0

@Richard ok, fatto! – ouah

1

Questo comando (attenzione, sarebbe riscrivere la storia):

git rebase --onto commitHash^ commitHash 

(@ soluzione ouah non ha funzionato per me, e invece Kevin ha fatto, ma la sua soluzione non dovrebbe essere un commento, si deve essere una risposta come questa.)

Problemi correlati