Git amend: correggere l’ultimo commit
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
Commit --amend sostituisce la punta con un commit nuovo, senza modificare l’oggetto originale. Corregge messaggio o contenuto dell’ultimo commit locale dopo la revisione dell’indice. Per un commit condiviso, una correzione aggiuntiva è spesso più semplice da coordinare che una riscrittura.
Esempio e condizioni
L’esempio usa un commit locale normale con messaggio errato e modifica mancante in src/parser.js. Sono due riparazioni: solo messaggio o anche contenuto. Non è un esempio per commit precedenti, iniziale o merge. Adatta file e messaggio e parti dalla punta attuale.
Controlla prima di modificare
Leggi status, ultimo commit e diff --cached. L’indice fornisce contenuto a un amend normale: file preparati per un’altra attività possono entrare inaspettatamente. Esamina anche il non preparato. Verifica se l’originale è stato pubblicato, integrato o usato da altri prima di cambiarne l’identità.
git status --short
git log -1 --oneline
git diff --cached
git diffConserva un riferimento o checkout separato
Crea rescue/before-amend in HEAD per conservare l’originale e confrontarlo. Non salva tutti i file locali: conserva quelli importanti separatamente. Reflog può identificare vecchi stati ancora presenti localmente, senza garantire oggetti permanenti né copie di modifiche mai confermate.
git branch rescue/before-amend HEADPrimo percorso
Per il solo messaggio, --amend --only senza percorsi esclude cambiamenti già preparati. -m fornisce il testo corretto. Controlla poi commit e indice: il lavoro preparato deve restare per un commit separato. Includere anche l’indice è l’altro flusso, sebbene entrambi usino --amend.
git commit --amend --only -m "Fix parser error message"
git diff --cachedScegli consapevolmente l’altro risultato
Per il file omesso, prepara il percorso voluto, rivedi tutto il diff dell’indice e usa --amend --no-edit per conservare il messaggio. Altri file preparati entrano salvo esclusione deliberata. Esegui verifiche del progetto. Scegliere hunks precisi aiuta la revisione, senza dimostrare la correttezza del commit combinato.
git add -- src/parser.js
git diff --cached
git commit --amend --no-editLimiti ed eccezioni
Se la punta è condivisa, preferisci un nuovo commit correttivo. Pubblicare una punta riscritta può richiedere coordinamento ed essere vietato dalla protezione. Nessun force push generico qui. Se il team permette una riscrittura, segui il processo separato per lease, branch e verifica con collaboratori.
git add -- src/parser.js
git diff --cached
git commit -m "Correct parser handling"Conflitti e pulizia
Amend normalmente non ha una sequenza propria di conflitti. Hook fallito o commit rifiutato richiedono controllo di messaggio e stato, non reset --hard automatico. Per contenuto errato, confronta prima rescue/before-amend. Conserva copie verificate dei file locali prima di un reset correttivo.
Verifica il risultato
Confronta messaggio e file dei due commit. ID diversi sono normali. Per solo messaggio gli alberi devono coincidere; per contenuto deve cambiare solo il patch voluto. Controlla quanto resta preparato e mantieni il recupero fino all’integrazione sicura della sostituzione revisionata.
git show --stat HEAD
git diff rescue/before-amend HEAD
git status --shortDomande frequenti
No-edit impedisce modifiche al contenuto? No, conserva il messaggio ma l’indice può cambiare contenuti. Amend modifica commit precedenti? Non direttamente; serve altro flusso. Dopo push? Solo con politica esplicita sulla storia condivisa; un commit aggiuntivo evita molta coordinazione.
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.