Questo dipende molto da cosa intendi per "ripristina".
Passa temporaneamente a un commit diverso
Se vuoi tornare temporaneamente ad esso, scherzare, quindi tornare dove sei, tutto ciò che devi fare è controllare il commit desiderato:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
O se vuoi impegnarti mentre sei lì, vai avanti e crea una nuova filiale mentre ci sei:
git checkout -b old-state 0d1d7fc32
Per tornare dove eri, controlla di nuovo il ramo in cui eri. (Se hai apportato modifiche, come sempre quando cambi ramo, dovrai gestirle nel modo appropriato. Puoi resettarle per gettarle via; potresti stash, checkout, stash pop per portarle con te; potresti impegnarti li a un ramo lì se vuoi un ramo lì.)
Hard commit commit non pubblicati
Se, d'altra parte, vuoi davvero sbarazzarti di tutto ciò che hai fatto da allora, ci sono due possibilità. Uno, se non hai pubblicato nessuno di questi commit, resetta semplicemente:
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
Se sbagli, hai già eliminato le modifiche locali, ma puoi almeno tornare a dove eri prima ripristinando di nuovo.
Annulla i commit pubblicati con nuovi commit
D'altra parte, se hai pubblicato il lavoro, probabilmente non vuoi reimpostare il ramo, dal momento che è effettivamente riscrivere la cronologia. In tal caso, potresti effettivamente ripristinare gli commit. Con Git, revert ha un significato molto specifico: creare un commit con la patch inversa per annullarlo. In questo modo non riscrivi alcuna cronologia.
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
La git-revert
manpage in realtà copre molto di questo nella sua descrizione. Un altro collegamento utile è questa sezione di git-scm.com che parla di git-revert .
Se decidi di non voler ripristinare dopo tutto, puoi ripristinare il ripristino (come descritto qui) o ripristinare prima del ripristino (vedere la sezione precedente).
In questo caso potresti trovare utile questa risposta:
Come riportare HEAD in una posizione precedente? (Testa staccata)