Scegli in base allo stato del lavoro
| Situazione | Comando | Risultato |
|---|---|---|
| Togliere un file dallo staging | git restore --staged -- file.txt | Conserva le modifiche nella directory di lavoro. |
| Annullare l’ultimo commit locale, mantenendo lo staging | git reset --soft HEAD~1 | Sposta il branch indietro di un commit. |
| Invertire un commit già condiviso | git revert <commit> | Aggiunge un commit che inverte quella modifica. |
Controlla prima git status e git log --oneline -5. L’esempio di reset richiede un commit precedente e riguarda un branch privato. Un commit di merge richiede una valutazione separata: non scegliere a caso il genitore principale.
Prova il reset in un repository di esercizio
Usa una directory nuova e vuota, esterna al progetto. L’esercizio crea due commit, toglie il secondo dalla cronologia del branch e conserva la sua modifica nello staging.
git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "one\n" > note.txt
git add note.txt
git commit -m "First note"
printf "two\n" >> note.txt
git commit -am "Second line"
git reset --soft HEAD~1
git status --short
git diff --cachedRisultato atteso: M note.txt nello stato breve e una riga two aggiunta nel diff dello staging. Il file contiene ancora entrambe le righe.
Evita di perdere modifiche
git reset --hard può eliminare modifiche non committate ai file tracciati e sovrascrivere percorsi non tracciati che ostacolano l’operazione. Non serve nell’esercizio sopra.
git restore -- file.txt sostituisce le modifiche non in staging; aggiungendo --staged agisci invece sull’indice. Se hai spostato un branch per errore, esamina git reflog e crea un branch di recupero sul vecchio commit verificato. Reflog non recupera tutte le modifiche non committate.