Modifica del messaggio di commit git dopo la pressione (dato che nessuno ha tirato da remoto)

Ho fatto un commit git e una successiva spinta. Vorrei cambiare il messaggio di commit. Se ho capito bene, questo non è consigliabile perché qualcuno potrebbe aver estratto dal repository remoto prima di apportare tali modifiche. Cosa succede se so che nessuno ha tirato?

C’è un modo per fare questo?

Cambiare la storia

Se è il commit più recente, puoi semplicemente farlo:

git commit --amend 

Questo fa apparire l’editor con l’ultimo messaggio di commit e ti consente di modificare il messaggio. (Puoi usare -m se vuoi cancellare il vecchio messaggio e usarne uno nuovo).

spingendo

E poi quando spingi, fai questo:

 git push --force-with-lease   

Oppure puoi usare “+”:

 git push  + 

Oppure puoi usare --force :

 git push --force   

Fai attenzione quando usi questi comandi.

  • Se qualcun altro ha fatto delle modifiche allo stesso ramo, probabilmente vorrai evitare di distruggere tali cambiamenti. L’opzione --force-with-lease è la più sicura, perché si interromperà se ci sono modifiche a monte (

  • Se non si specifica esplicitamente il ramo, Git utilizzerà le impostazioni push predefinite. Se l’impostazione push predefinita è “corrispondente”, puoi distruggere le modifiche su più rami contemporaneamente.

Tirando / andando dopo

Chiunque abbia già estratto riceverà ora un messaggio di errore e dovrà aggiornarlo (presumendo che non stia facendo alcuna modifica autonomamente) facendo qualcosa del genere:

 git fetch origin git reset --hard origin/master # Loses local commits 

Fai attenzione quando usi reset --hard . Se hai modifiche al ramo, quelle modifiche saranno distrutte.

Una nota sulla modifica della cronologia

I dati distrutti sono in realtà solo il vecchio messaggio di commit, ma --force non lo sa e cancellerà volentieri anche altri dati. Quindi pensa a: forza come “Voglio distruggere i dati, e so per certo quali dati vengono distrutti”. Ma quando i dati distrutti vengono commessi, è spesso ansible recuperare i vecchi commit dal reflog: i dati sono effettivamente orfani anziché distrutti (sebbene i commit orfani vengano periodicamente cancellati).

Se non pensi di distruggere i dati, allora stai lontano da --force … potrebbero accadere cose brutte .

Questo è il motivo per cui – --force-with-lease è un po ‘più sicuro.

Dì solo:

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

e poi

 git push --force 

Potrebbe essere in ritardo per la festa, ecco una risposta che non vedo qui.

Step1 : git rebase -i HEAD~n per fare rebase interattivo per gli ultimi n commit interessati.

git aprirà un editor per gestire tali commit, nota questo comando: # r, reword = use commit, but edit the commit message , che è esattamente quello di cui abbiamo bisogno.

Step2 : cambia il pick in r per quei commit che vuoi aggiornare il messaggio. Salva e chiudi l’editor.

Step3 : nei seguenti file di commit, aggiorna il messaggio di commit come preferisci

Step4 : dopo tutto, i messaggi di errore vengono aggiornati. potresti voler fare git push -f per aggiornare il telecomando.

Utilizza questi due passaggi nella console:

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

e poi

 git push -f 

Fatto 🙂

Dovrebbe essere notato che se si utilizza push --force con mutiple refs, verranno TUTTI modificati come risultato. Assicurati di prestare attenzione a dove il tuo repository git è configurato per il push to. Fortunatamente esiste un modo per salvaguardare il processo, specificando un singolo ramo da aggiornare. Leggi dalle pagine di git man:

Si noti che –force si applica a tutti i ref che vengono spinti, quindi usandolo con push.default impostato su matching o con più destinazioni push configurate con remote. *. Push potrebbe sovrascrivere refs diversi dal ramo corrente (inclusi i ref locali che sono rigorosamente dietro la loro controparte remota). Per forzare una spinta verso un solo ramo, usa un + davanti al refspec per spingere (ad esempio, git push origin + master per forzare una spinta al ramo principale).

Se vuoi modificare un commit precedente, non l’ultimo, dovrai usare il comando rebase come spiegato qui, pagina di aiuto di Github , nella sezione Modifica del messaggio della sezione dei messaggi di commit più vecchi o multipli

Comando 1 .

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

Poi,

Comando 2 .

 git push origin --force 
 git commit --amend 

quindi modificare quindi modificare il messaggio nella finestra corrente. Dopo questo

 git push --force-with-lease 

Questo funziona per me abbastanza bene,

git checkout origin / branchname

se sei già nel ramo, allora è meglio fare pull o rebase

 git pull 

o

 git -c core.quotepath=false fetch origin --progress --prune 

Più tardi puoi semplicemente usarlo

 git commit --amend -m "Your message here" 

o se ti piace aprire l’editor di testo, quindi utilizzare

 git commit --amend 

Preferirò usare l’editor di testo se hai molti commenti. Puoi impostare il tuo editor di testo preferito con il comando

 git config --global core.editor your_preffered_editor_here 

Ad ogni modo, quando hai terminato di cambiare il messaggio di commit, salvalo ed esci

e poi corri

 git push --force 

E hai finito

Un’altra opzione è creare un ulteriore “errata commit” (e push) che fa riferimento all’object commit che contiene l’errore – il nuovo commit errata fornisce anche la correzione. Un commit errata è un commit senza modifiche sostanziali al codice ma un importante messaggio di commit – ad esempio, aggiungi un carattere spazio al tuo file readme e --allow-empty modifica con l’importante messaggio di commit, oppure usa l’opzione git --allow-empty . È certamente più facile e più sicuro rispetto al rebasing, non modifica la cronologia vera e mantiene pulita la struttura delle filiali (l’uso di amend è anche una buona scelta se correggi il commit più recente, ma un commit errata può essere una buona scelta per più vecchi si impegna). Questo tipo di cose accade così raramente che semplicemente documentare l’errore è abbastanza buono. In futuro, se devi cercare un log di git per una parola chiave della funzione, il commit originale (errato) potrebbe non apparire perché è stata usata la parola chiave sbagliata in quel commit originale (l’errore di battitura originale) – tuttavia, la parola chiave apparirà nel commit errata che quindi ti indirizza al commit originale che ha avuto l’errore di battitura. Ecco un esempio:

 $ git log
 commit 0c28141c68adae276840f17ccd4766542c33cf1d
 Autore: Primo Ultimo 
 Data: mercoledì 8 agosto 15:55:52 2018 -0600

     Errata commit:
     Questo commit non ha modifiche sostanziali al codice.
     Questo commit viene fornito solo per documentare una correzione a un messaggio di commit precedente.
     Questo riguarda l'object commit e083a7abd8deb5776cb304fa13731a4182a24be1
     Messaggio di commit errato originale:
         Colore di sfondo cambiato in rosso
     Correzione (* modifica evidenziata *):
         Colore di sfondo cambiato in * blu *

 commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
 Autore: Primo Ultimo 
 Data: Wed 8 agosto 15:43:16 2018 -0600

     Qualche messaggio di commit temporaneo

 commit e083a7abd8deb5776cb304fa13731a4182a24be1
 Autore: Primo Ultimo 
 Data: mercoledì 8 agosto 13:31:32 2018 -0600

     Colore di sfondo cambiato in rosso

informazioni aggiuntive per lo stesso problema se si utilizza la pipeline di bitbucket

modifica il tuo messaggio

 git commit --amend 

spingere al sever

 git push --force   

quindi aggiungi –force al tuo comando push sulla pipeline

 git ftp push --force 

Questo cancellerà i tuoi commit precedenti e spingerà quello attuale.

rimuovere la forza dopo la prima pressione

l’ho provato sulla pipeline bitbucket e funziona bene