Per 1 e 2, tutto quello che dovete fare è:
git stash -u #same effect as git reset --hard, but can be undone
questo sarà buttare via tutti i cambiamenti. Stai attento se usi reset
. Leggi su come manipolare l'indice e le permutazioni delle opzioni hard, soft e miste con reset e checkout. Il libro progit spiega in dettaglio: http://progit.org/2011/07/11/reset.html
per 3,
git reset --hard HEAD^
ma sarebbe meglio emettere un git stash -u
prima di questo - nel caso in cui si dispone di modifiche in sospeso.
Ciò ripristinerà il ramo corrente al padre del commit corrente. Cerca "tree-ish" online.^e ~ N dopo un riferimento ti permetteranno di puntare a qualsiasi punto raggiungibile nella cronologia di quel riferimento. Per capire come viene tracciata la cronologia in git, "Git for computer scientists" spiega il pozzo del grafico Acyclic diretto: http://eagain.net/articles/git-for-computer-scientists/
Per ottenere singoli file dallo stato del commit corrente (cioè, eliminare le modifiche), è possibile utilizzare il checkout
git checkout HEAD -- <a list of files>
Se si è emesso l'ultimo comando di ripristino sopra per errore, non si è nei guai. Git tiene traccia di dove i rami usavano indicare il reflog.
git reflog
elencherà la cronologia. Si può vedere a che la produzione come fare riferimento a ciascuno, in modo:
git reset --hard [email protected]{1}
sarà ripristinare il ramo dove è usato per essere 1 cambiamento prima.
Per aggiungere, se si desidera cancellare i file ignorati ei file non monitorate, si può pulire con questo:
git clean -xdf
fonte
2011-11-03 17:31:01
Attenzione; git non ti chiederà una bella (irritante?) finestra di dialogo per selezionare i file modificati su cui vuoi annullare le modifiche in sospeso. :) –
un modo per farlo sarebbe quello di aggiungere il parametro -p che ti chiederà ogni singolo blocco di modifiche. Puoi dire 'a' o' d' per lavorare su interi file invece di 'y' o' n' per i singoli hunk. –