Come si sposta un commit nell'area di gestione temporanea in git?


143

Se si desidera spostare un commit nell'area di gestione temporanea - che è non impegnativo e spostare tutte le modifiche che erano in esso nell'area di gestione temporanea (mettendo effettivamente il ramo nello stato in cui sarebbe stato prima del commit) - Come si fa? O è qualcosa che non puoi fare?

Il più vicino che so come fare è copiare tutti i file che sono stati modificati nel commit da qualche altra parte, reimpostare il ramo sul commit prima del commit che si sta tentando di spostare nell'area di gestione temporanea, spostare tutti i copiare nuovamente i file nel repository, quindi aggiungerli all'area di gestione temporanea. Funziona, ma non è esattamente una bella soluzione. Quello che mi piacerebbe poter fare è semplicemente annullare il commit e spostarne il cambiamento nell'area di gestione temporanea. Si può fare? E se sì, come?

Risposte:


267
git reset --soft HEAD^

Ciò ripristinerà il tuo indice su HEAD^(il commit precedente) ma lascerà le tue modifiche nell'area di gestione temporanea.

Ci sono alcuni diagrammi utili nei git-resetdocumenti

Se sei su Windows potrebbe essere necessario utilizzare questo formato:

git reset --soft HEAD~1

18
Se questo non fa nulla, prova git reset --soft HEAD~1che significa la stessa cosa ma funziona anche su Windows.
Roman Starkov,

9
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 desideri se si tratta di un commit di unione che ha più genitori. Per quanto riguarda la shell cmd di Windows, è sufficiente uscire dal carot con un altro carot, ad esempio "git reset --soft HEAD ^^" per tornare a "HEAD ^". Questo è puramente un artefatto della shell cmd di Windows, quindi non dovresti farlo se usi una GUI git su Windows. Tilde e carot sono spiegati su schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains

Ho aggiunto un link per i "diagrammi utili". Potresti verificare rapidamente se conduce alla sezione che intendevi? Grazie
Neuron,

5

Un modo semplice

  1. File impegnati nell'area di gestione temporanea

    git reset --soft HEAD^1

  2. Staging su UnStage : (usa "git reset HEAD ..." per annullare la messa in scena)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

qui, * -> tutti i file terminano con ds.txt per annullare la fase.

Fare riferimento all'immagine seguente per chiarezza:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.