2011-08-27 12 views
70

Se si desidera spostare un commit nell'area di gestione temporanea, questo è non trasmetterlo e spostare tutte le modifiche che si trovavano nell'area di staging (posizionando effettivamente il ramo nello stato in cui si sarebbe verificato prima del commit) - Come si fa? O è qualcosa che non puoi fare?Come si sposta un commit nell'area di gestione temporanea in git?

Il più vicino che so fare è copiare tutti i file che sono stati modificati nel commit in un'altra posizione, reimpostare il ramo sul commit prima del commit che si sta tentando di spostare nell'area di staging, spostare tutti i file copiati nel repository e quindi aggiungerli all'area di gestione temporanea. Funziona, ma non è esattamente una bella soluzione. Quello che mi piacerebbe essere in grado di fare è semplicemente annullare il commit e spostare il suo cambiamento nell'area di staging. Può essere fatto? E se sì, come?

risposta

132
git reset --soft HEAD^ 

Questo resetta il tuo indice di HEAD^(la precedente commit) ma lasciare le modifiche nella zona di sosta.

Ci sono alcuni diagrammi a portata di mano nelle git-reset docs

Se siete su Windows potrebbe essere necessario utilizzare questo formato:

git reset --soft HEAD~1 
+15

Se questo non fa nulla, provate 'git azzerato HEAD --soft ~ 1' che significa la stessa cosa ma funziona anche su Windows. –

+5

Per chiarire, tilde e carot significano cose diverse nelle versioni git. HEAD ~ 1 segue sempre il primo genitore di un commit, che potrebbe non essere quello che vuoi se si tratta di un commit di unione con più genitori. Per quanto riguarda la shell di cmd di Windows, devi solo sfuggire al carot con un altro carot, ad es. "git reset --soft HEAD ^^" per tornare a "HEAD ^". Questo è puramente un artefatto della shell di cmd di Windows, quindi non dovresti farlo se usi una GUI git su Windows. Tilde e carot sono spiegati su http://schacon.github.io/git/git-rev-parse#_specifying_revisions – ahains