Domanda Come modificare i commit esistenti, non spinti?


Ho scritto la cosa sbagliata in un messaggio di commit. In alternativa, ho dimenticato di includere alcuni file.

Come posso cambiare il messaggio / i file di commit? Il commit non è stato ancora spinto.


7680
2017-10-07 15:44


origine


risposte:


Modifica del messaggio di commit più recente

git commit --amend

aprirà il tuo editor, permettendoti di cambiare il messaggio di commit del commit più recente. Inoltre, è possibile impostare il messaggio di commit direttamente nella riga di comando con:

git commit --amend -m "New commit message"

... tuttavia, questo può rendere più ingombranti i messaggi di commit su più righe o piccole correzioni.

Assicurati di non avere alcuna modifica delle copie di lavoro messo in scena  prima di fare questo o si impegneranno anche loro. ( Unstaged  le modifiche non verranno commesse).

Modifica del messaggio di un commit che hai già inviato al tuo ramo remoto

Se hai già spinto il tuo commit fino alla tua diramazione remota, allora lo farai bisogno di forzare spingere il commit  con:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Attenzione: il push forzato sovrascriverà il ramo remoto con lo stato di quello locale . Se ci sono commit sul ramo remoto che non hai nella tua filiale locale, tu volere  perdere quei commit.

Avvertenza: sii cauto nel modificare i commit che hai già condiviso con altre persone.  L'emendamento si impegna essenzialmente riscritture  loro di avere diversi SHA  ID, che pone un problema se altre persone hanno copie del vecchio commit che hai riscritto. Chiunque abbia una copia del vecchio commit dovrà sincronizzare il proprio lavoro con il commit appena riscritto, che a volte può essere difficile, quindi assicurati di coordinarti con gli altri quando tenti di riscrivere la cronologia dei commit condivisa, o semplicemente evita di riscrivere i commit condivisi del tutto.


Usa rebase interattivo

Un'altra opzione è usare rebase interattivo.
Ciò consente di modificare qualsiasi messaggio che si desidera aggiornare anche se non è l'ultimo messaggio.

Per fare un git squash, segui questi passaggi:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Dopo aver schiacciato i tuoi commit, scegli il e/r per modificare il messaggio

enter image description here

Nota importante su rebase interattivo

Quando usi il git rebase -i HEAD~X ci può essere Di Più  di X impegna. Git "raccoglierà" tutti i commit nell'ultimo X commette e se c'è stata un'unione da qualche parte tra quella gamma vedrai tutti i commit anche così il risultato sarà X +.

Bel consiglio:

Se devi farlo per più di una singola filiale e potresti dover affrontare dei conflitti quando modifichi il contenuto, configura git rerere e lascia che Git risolva automaticamente questi conflitti per te.


Documentazione


14788
2018-02-08 04:26



git commit --amend -m "your new message"

2414
2017-10-07 19:52



Se il commit che desideri correggere non è il più recente:

  1. git rebase --interactive $parent_of_flawed_commit

    Se vuoi correggere diversi commit difettosi, passa il genitore di uno dei più vecchi.

  2. Arriverà un editor, con un elenco di tutti i commit da quello che hai dato.

    1. Modificare pick a reword (o su vecchie versioni di Git, a edit) di fronte a qualsiasi commit che si desidera risolvere.
    2. Una volta salvato, Git ripeterà i commit elencati.
       

  3. Per ogni impegno che vuoi esprimere con altre parole , Git ti riporterà nel tuo editor. Per ogni impegno che vuoi modificare , Git ti fa cadere nel guscio. Se sei nella shell:

    1. Cambia il commit nel modo che preferisci.
    2. git commit --amend
    3. git rebase --continue

La maggior parte di questa sequenza ti verrà spiegata dall'output dei vari comandi man mano che procedi. È molto semplice, non è necessario memorizzarlo, ricordalo git rebase --interactive ti consente di correggere i commit non importa quanto tempo fa fossero.


Nota che non vorrai cambiare i commit che hai già spinto. O forse lo fai, ma in quel caso dovrai fare molta attenzione a comunicare con chiunque abbia tirato fuori i tuoi impegni e fatto il lavoro su di loro. Come faccio a ripristinare / risincronizzare dopo che qualcuno ha premuto un rebase o un reset su un ramo pubblicato?


2293
2017-08-15 21:20



Per modificare il commit precedente, apportare le modifiche desiderate e metterle in atto e quindi eseguire

git commit --amend

Questo aprirà un file nel tuo editor di testo che rappresenta il tuo nuovo messaggio di commit. Inizia popolato con il testo dal vecchio messaggio di commit. Cambia il messaggio di commit come vuoi, quindi salva il file e chiudi l'editor per terminarlo.

Per modificare il commit precedente e mantenere lo stesso messaggio di registro, eseguire

git commit --amend -C HEAD

Per correggere il commit precedente rimuovendolo interamente, esegui

git reset --hard HEAD^

Se si desidera modificare più di un messaggio di commit, eseguire

git rebase -i HEAD~COMMIT_COUNT 

(Sostituire COMMIT_COUNT  con il numero di commit che si desidera modificare.) Questo comando avvia l'editor. Segna il primo commit (quello che vuoi cambiare) come "edit" invece di "pick", quindi salva ed esci dal tuo editor. Apporta la modifica che vuoi impegnare e poi esegui

git commit --amend
git rebase --continue

Nota: è possibile "Effettuare il cambiamento desiderato" anche dall'editor aperto da git commit --amend


749
2018-06-06 21:16



Come già detto, git commit --amend è il modo per sovrascrivere l'ultimo commit. Una nota: se vuoi anche sovrascrivere i file , il comando sarebbe

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



Puoi anche usare git filter-branch per quello.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Non è facile come un banale git commit --amend, ma è particolarmente utile, se hai già delle unioni dopo il tuo messaggio di commit errato.

Nota che questo proverà a riscrivere OGNI commit tra HEAD e il commit imperfetto, quindi dovresti scegliere il tuo msg-filter comando molto saggio ;-)


346
2018-01-10 14:23



Preferisco così.

git commit --amend -c <commit ID>

Altrimenti, ci sarà un nuovo commit con un nuovo ID commit


306
2017-11-08 03:51



Se si utilizza lo strumento Git GUI, è disponibile un pulsante denominato modify last commit. Clicca su quel bottone e poi mostrerà i tuoi ultimi file e messaggi di commit. Basta modificare quel messaggio e puoi impegnarlo con un nuovo messaggio di commit.

Oppure usa questo comando da una console / terminale:

git commit -a --amend -m "My new commit message"

304
2018-01-22 17:23



Puoi usare Git rebasing . Ad esempio, se si desidera modificare di nuovo il commit di bbc643cd, eseguire

$ git rebase bbc643cd^ --interactive

Nell'editor predefinito, modifica "scegli" in "modifica" nella riga di cui vuoi modificare il commit. Apporta le tue modifiche e poi mettile in scena con

$ git add <filepattern>

Ora puoi usare

$ git commit --amend

per modificare il commit e dopo

$ git rebase --continue

per tornare al comando precedente.


279
2017-10-22 11:22