Vai al contenuto
GitTree
Guide Git4 minuti di lettura

Spiegazione del ripristino di Git: morbido, misto e difficile

git reset sposta il tuo ramo su un altro commit. Le tre modalità differiscono solo per ciò che fanno con i tuoi file. Ecco cosa conserva ciascuno, quale utilizzare e come tornare indietro quando si ripristina troppo.

Scritto da Kodmora

La software house dietro GitTree

Aggiornato
  • Annullamento e ripristino
  • Commetti la cronologia
  • Commit
In questa pagina

Tutte e tre le modalità spostano il ramo corrente sul commit da te nominato. `--soft` mantiene tutte le modifiche in fase, `--mixed` (impostazione predefinita) le mantiene nella cartella di lavoro senza fasi e `--hard` le scarta. Per annullare l'ultimo commit mantenendo il lavoro, esegui git reset --soft HEAD~1. Utilizza --hard solo quando sei sicuro, perché elimina definitivamente le modifiche non salvate.

Qual è la differenza tra morbido, misto e duro?

Cosa cambia in ciascuna modalità di ripristino di Git
ModalitàIl ramo si muoveZona di sostaCartella di lavoroUsalo per
--softSìMantenutoMantenutoRedo esegue il commit: tutto rimane in scena
--mixedSìRipristinaMantenutoTogli lo stage e scegli nuovamente cosa confermare
--hardSìRipristinaRipristinaButtare via il lavoro

Git conserva tre copie del tuo lavoro: la cronologia dei commit, l'area di staging e la cartella di lavoro. Reset sposta sempre il primo. La modalità decide se riscrivere anche le altre due.

Quando dovrei usare git reset --soft?

Usalo per annullare i commit mantenendo ogni modifica in scena, pronta per eseguire nuovamente il commit. È il modo più rapido per comprimere un ramo in un commit:

# undo the last commit, keep the changes staged
git reset --soft HEAD~1

# squash everything since main into one commit
git reset --soft main
git commit -m "feat(search): quick open"

Quando dovrei usare git reset --mixed?

È l'impostazione predefinita, quindi git reset significa git reset --mixed. Usalo per annullare i commit e dividere il lavoro in modo diverso o per rimuovere dallo stage i file:

# undo the last two commits, keep the changes unstaged
git reset HEAD~2

# unstage one file (the branch does not move)
git reset src/search.ts

Per l'annullamento della fase di staging, git restore --staged src/search.ts svolge lo stesso lavoro e legge in modo più chiaro.

Quando dovrei usare git reset --hard?

# drop the last commit and its changes
git reset --hard HEAD~1

# match the remote exactly
git fetch origin
git reset --hard origin/main

Come rimuovo un commit da un ramo?

Modi per rimuovere un commit
SituazioneComando
Ultimo commit, non inviatogit reset --hard HEAD~1
Commit precedente, non inviatogit rebase -i <sha>~1, quindi contrassegnalo come drop
Il commit è già stato inviatogit revert <sha>
Il commit è andato al ramo sbagliatogit cherry-pick, quindi reimposta il vecchio ramo

git revert mantiene intatta la cronologia, quindi è l'unica scelta sicura su un ramo condiviso. Il ripristino di un ramo inviato richiede un push forzato e rompe i cloni dei tuoi compagni di squadra. Rebase interattivo e cherry-pick hanno le proprie guide.

Come posso annullare un reset git?

Reset ha spostato il ramo e il reflog ricorda dov'era:

git reflog
# 3e52f10 HEAD@{0}: reset: moving to HEAD~2
# 9b3c7d1 HEAD@{1}: commit: add search box

git reset --hard 9b3c7d1

Ciò ripristina i commit, anche dopo --hard. I file che sono stati sottoposti a stage ma che non sono mai stati sottoposti a commit possono talvolta essere trovati con git fsck --lost-found. I cambiamenti che non sono mai stati in stage sono spariti. Annulla un ripristino, un rebase o un commit copre ogni caso.

Qual è la differenza tra reset, ripristino e ripristino?

Tre comandi che suonano uguali
ComandoCosa faRiscrive la storia?
git resetSposta il ramo su un altro commitSì
git revertAggiunge un commit che ne annulla un altroNo
git restoreModifica i file, mai il ramoNo

Come reimpostare un ramo in GitTree

  1. Scegli il commit

    Fare clic con il pulsante destro del mouse sul commit a cui il ramo dovrebbe tornare e aprire Reimposta... su questo commit.

  2. Scegli la modalità

    Selezionare Soft: Mantieni tutte le modifiche in fase, Misto: Mantieni le modifiche nella cartella di lavoro o Difficile: Elimina tutte le modifiche….

  3. Annulla se necessario

    GitTree salva prima il tuo lavoro sotto refs/ogt/trash, quindi Annulla può ripristinarlo, anche dopo un hard reset.

Le modalità di ripristino graduale, misto e hardware nel menu di un commit in GitTree.
Le modalità di ripristino graduale, misto e hardware nel menu di un commit in GitTree.GitTree interfaccia con un repository dimostrativo.

Vedi reimpostare un ramo su un commit per i dettagli e la lezione sulle modalità di ripristino per esercitarti su un repository sicuro.

Domande frequenti

Cosa significa HEAD~1?

Il commit è un passo prima di quello corrente. HEAD~3 è tre passi indietro. git log --oneline mostra gli hash se preferisci nominare direttamente un commit.

Git reset elimina i commit?

Allontana il ramo da loro, quindi smettono di apparire in git log. Rimangono nel reflog per almeno 30 giorni per impostazione predefinita, poi Git può rimuoverli.

Come posso annullare il mio ultimo commit mantenendo le modifiche?

Esegui git reset --soft HEAD~1 per mantenerli in fase o git reset HEAD~1 per mantenerli non in fase.

Git reset --hard è sicuro?

È sicuro per il lavoro confermato, che il reflog può riportare indietro. Non è sicuro per il lavoro non confermato, che cancella. Metti da parte o confermati prima se non sei sicuro.

Posso reimpostare un ramo che è già stato inviato?

Solo con un push forzato, che riscrive il ramo per tutti. Sui rami condivisi, utilizza invece git revert.

Fonti

Le affermazioni su altri prodotti sono state confrontate con le rispettive pagine ufficiali in data 7 novembre 2026. Cambiano prezzi e caratteristiche; le pagine dei venditori sono la fonte della verità.