Con SVN è facile unire al contrario un commit, ma come farlo con Git?
Con SVN è facile unire al contrario un commit, ma come farlo con Git?
Risposte:
Per creare un nuovo commit che "annulli" le modifiche di un commit passato, usa:
$ git revert <commit>
È anche possibile rimuovere effettivamente un commit da un punto arbitrario in passato ribasandolo e quindi ripristinandolo, ma davvero non vuoi farlo se hai già trasferito i tuoi commit in un altro repository (o qualcun altro ti ha estratto) .
-m <parent number>
un'opzione a git revert
per specificare quale modifica annullare. Se vuoi annullare un'unione della cronologia non pubblicata, usa git reset --hard HEAD^1
.
-m
significa che un'unione futura dal ramo non unito non includerà le modifiche da prima di quell'unione! Vedi schacon.github.com/git/howto/revert-a-faulty-merge.txt per i modi corretti per riunire un ramo non unito.
Per ripristinare un merge commit, è necessario utilizzare: git revert -m <parent number>
. Quindi, ad esempio, per ripristinare il commit di unione più recente utilizzando il genitore con il numero 1, useresti:
git revert -m 1 HEAD
Per ripristinare un commit di unione prima dell'ultimo commit, dovresti fare:
git revert -m 1 HEAD^
Utilizzare git show <merge commit SHA1>
per vedere i genitori, la numerazione è l'ordine in cui appaiono ad esMerge: e4c54b3 4725ad2
documentazione di git merge: http://schacon.github.com/git/git-merge.html
discussione su git merge (confusa ma molto dettagliata): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
git show <merge commit SHA1>
per vedere i genitori, la numerazione è l'ordine in cui appaiono, ad esempioMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
quel comando ha funzionato per me per annullare un commit di unione che era diversi commit di unione prima di head e aveva molti commit al di sotto.
git reset --hard HEAD^
Utilizzare il comando precedente per annullare le modifiche di unione.
Se non vuoi eseguire il commit o desideri eseguire il commit in un secondo momento (il messaggio di commit sarà ancora preparato per te, che puoi anche modificare):
git revert -n <commit>