Annullare l’ultimo commit Git: soft reset o revert
I blocchi sono casi diversi, non un unico script. Scegli il caso del tuo repository. Sostituisci branch, percorsi e VERIFIED_COMMIT prima dell’uso. I comandi di annullamento valgono solo per la propria operazione attiva; non eseguire entrambe le alternative.
Risposta breve
Per annullare l’ultimo commit locale conservando le modifiche, reset --soft sposta il branch al genitore lasciando indice e file invariati. Per uno condiviso, revert aggiunge un commit inverso. Decidi prima se conservare il codice e se altre persone possiedono quella storia.
Esempio e condizioni
L’esempio ha un commit normale, senza merge e con genitore, alla punta attuale, albero pulito e nessun lavoro estraneo preparato. Il primo commit non ha padre HEAD^; un merge ne ha più di uno. Non rientrano nel caso. Leggi il grafo senza trattare HEAD~1 come annullamento universale.
Controlla prima di modificare
Controlla patch, stato e condivisione. Togliere il commit continuando il codice, invertire codice pubblicato e scartare tutto sono risultati diversi. Coordina prima di riscrivere storia pubblicata. Una data recente o il tuo nome d’autore non dimostra che il commit sia privato.
git status --short
git log -3 --oneline --decorate
git show --stat HEADConserva un riferimento o checkout separato
Crea rescue/before-undo in HEAD per conservare lo stato confermato originale. Salva file senza commit separatamente: il branch non li contiene. Nel caso pulito soft reset espone solo quel patch nell’indice. Un indice già modificato può mescolare attività e richiede una revisione propria.
git branch rescue/before-undo HEAD
SCHOOL_UNDO=$(git rev-parse HEAD)Primo percorso
Nel caso locale che conserva cambiamenti, usa reset --soft HEAD^ e controlla diff --cached. Il contenuto resta nell’indice e nell’albero per un nuovo commit. Reset mixed modifica l’indice diversamente. Non scegliere --hard solo per accorciare lo stato: cambia anche i file di lavoro.
git reset --soft HEAD^
git diff --cached
git status --shortScegli consapevolmente l’altro risultato
Per un commit condiviso normale, salva l’ID verificato in SCHOOL_UNDO e usa revert. Il nuovo commit inverte la modifica mantenendo la storia ricevuta. Verifica risultato e progetto prima di push normale. Un merge richiede scelta del genitore principale e comprensione degli effetti futuri: usa un processo specifico.
git revert "$SCHOOL_UNDO"Limiti ed eccezioni
Revert può confliggere con lavoro successivo. Leggi status, risolvi e prepara file, poi revert --continue. Usa revert --abort per una scelta sbagliata. Reset --soft non ha uno stato corrispondente di continuazione o annullamento. Non mescolare flussi né avviare un’altra riparazione con revert ancora attivo.
git status
git revert --abortConflitti e pulizia
Scartare anche codice confermato e file locali è un’altra decisione distruttiva. Conserva lo stato prima. Il lavoro senza commit non è nel reflog. Con restore points attivati e modifiche locali rilevate, FluxGit può salvare un safety stash prima di hard reset supportato; questo terminale non invoca quel percorso protetto.
Verifica il risultato
Dopo soft reset confronta punta e patch preparato con il recupero. Dopo revert verifica che l’inverso tocchi solo ciò che desideri e mantenga lavoro successivo utile. Esegui verifiche pertinenti. Mantieni il recupero durante la revisione: completare un comando senza errore non dimostra codice corretto.
git log -4 --oneline --decorate
git status --short
git diff --cachedDomande frequenti
Soft reset cancella file? Mantiene albero e indice spostando il riferimento. Revert elimina l’originale? No, aggiunge una modifica inversa. Reflog recupera tutto? No: tratta riferimenti locali conservati e oggetti confermati, non contenuti arbitrari di file non salvati.
Esamina l’operazione in FluxGit
Usa la storia visiva e la vista delle modifiche di FluxGit per esaminare l’operazione e i commit pertinenti. Mantieni le verifiche di branch, condivisione e file locali dell’esempio. La pagina di download mostra build e piattaforme disponibili.