Storia che cambia
Se è il commit più recente, puoi semplicemente farlo:
git commit --amend
Questo fa apparire l'editor con l'ultimo messaggio di commit e ti permette di modificare il messaggio. (Puoi usarlo -m
se vuoi cancellare il vecchio messaggio e usarne uno nuovo.)
spingendo
E poi quando spingi, fai questo:
git push --force-with-lease <repository> <branch>
Oppure puoi usare "+":
git push <repository> +<branch>
Oppure puoi usare --force
:
git push --force <repository> <branch>
Fai attenzione quando usi questi comandi.
Se qualcun altro ha inviato le modifiche allo stesso ramo, probabilmente vorrai evitare di distruggerle. L' --force-with-lease
opzione è la più sicura, perché si interromperà in caso di modifiche a monte (
Se non specifichi esplicitamente il ramo, Git utilizzerà le impostazioni push predefinite. Se l'impostazione push predefinita è "corrispondente", è possibile distruggere le modifiche su più rami contemporaneamente.
Tirare / recuperare in seguito
Chiunque abbia già estratto ora riceverà un messaggio di errore e dovrà aggiornarlo (supponendo che non stia apportando alcuna modifica da solo) facendo qualcosa del genere:
git fetch origin
git reset --hard origin/master # Loses local commits
Fai attenzione quando lo usi reset --hard
. Se sono presenti modifiche al ramo, tali modifiche verranno distrutte.
Una nota sulla modifica della cronologia
I dati distrutti sono in realtà solo il vecchio messaggio di commit, ma --force
non lo sanno e elimineranno felicemente anche altri dati. Quindi pensa --force
a "Voglio distruggere i dati e so con certezza quali dati vengono distrutti". Ma quando vengono commessi i dati distrutti, è spesso possibile recuperare vecchi commit dal reflog: i dati vengono effettivamente resi orfani anziché distrutti (sebbene i commit orfani vengano periodicamente eliminati).
Se non pensi di distruggere i dati, stai lontano da --force
... potrebbero succedere cose brutte .
Questo è il motivo per cui --force-with-lease
è un po 'più sicuro.