2014-06-19 6 views
5

Sto tentando di ripristinare un determinato numero di "hash" in git, utilizzando il comando 'revert'.git revert <hash> non consentito a causa di un'unione ma non è stata fornita l'opzione -m

Sto usando il seguente comando:

git revert c14609d74eec3ccebafc73fa875ec58445471765 

Ma, io sto ottenendo il seguente restituito:

error: Commit c14609d74eec3ccebafc73fa875ec58445471765 is a merge but no -m option was given.
fatal: revert failed

Come nuovi utenti git, si prega si può spiegare cosa sta succedendo & quello che ho fare per risolvere questo.

Desidero ripristinare questo commit (c14609d74eec3ccebafc73fa875ec58445471765) che vedo durante l'esecuzione di git log.

+0

possibile duplicato di [Annulla un Git merge?] (Http://stackoverflow.com/questions/2389361/undo-a-git-merge) –

risposta

13

Si sta tentando di annullare un commit di unione e git non sa a quale genitore ripristinare. Lo -m ci consente di scegliere quale genitore scegliere. Vedi l'unione di commit e annota quale genitore vuoi andare. Le informazioni genitore può essere visto in git log, ad esempio:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

ed eseguire:

git revert <hash> -m 1 

dove 1 indica il numero genitore 1.

Se si sta tentando di tornare - che impegnarsi, fare:

git reset --hard <hash> 

Comprendere la differenza tra git revert e git reset dai documenti e decidere quale si desidera. git revert è l'opzione più sicura, ma in realtà non fa quello che vuoi. Ritorna solo alle modifiche di un (insieme di) commit. git reset ti consente di passare a un particolare commit nella cronologia e di riscrivere la cronologia.

+1

manojlds, qual è stata la piena 'git log' comando che è stato eseguito a vedi il genitore? –

2

I want to revert back to ...

Allora non si vuole git revert, almeno non in questo modo. git revert è per ripristinare le modifiche specifiche apportate in quel commit. Quello che stai cercando è di ripristinare o annullare tutte le modifiche apportate dopo il che si impegnano.

git reset è il comando da utilizzare qui.

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 reimposta completamente il ramo, l'indice e l'albero di lavoro a quel commit specifico.

Si noti che si applicano le normali precauzioni: se qualcun altro ha recuperato in seguito commette già, rimuoverli dalla cronologia come questo complica le cose per loro. Se invece desidera creare un nuovo commit, che ripristina semplicemente lo stato a quello di impegnarsi c14609d74eec3ccebafc73fa875ec58445471765, è possibile utilizzare git rm e git checkout:

git rm -r . 
git checkout c14609d74eec3ccebafc73fa875ec58445471765 . 

(Il rm è necessario per assicurarsi che i file appena aggiunti anche ottenere rimosso.) Ciò consente di creare un nuovo commit, in aggiunta alla cronologia locale, che annulla ogni modifica dal c14609d74eec3ccebafc73fa875ec58445471765.

Problemi correlati