Modificare un commit che non era il commit precedente

Frequentemente avrò un stream di lavoro simile al seguente:

  1. Applica modifiche a un gruppo di file
  2. Applica modifiche a un diverso gruppo di file
  3. Realizzo che ho perso alcune modifiche che appartengono al primo commit
  4. Maledizione

Non posso usare git commit --amend perché non è il commit più recente che ho bisogno di cambiare. Qual è il modo migliore per aggiungere modifiche al primo commit senza toccare il secondo?

Puoi usare git rebase per risolvere questo problema. Esegui git rebase -i sha1~1 dove sha1 è l’hash di commit di quello che vuoi cambiare. Trova il commit che desideri modificare e sostituisci “scegli” con “modifica” come descritto nei commenti dell’editor di rebase. Quando continui da lì, puoi modificare quel commit.

Nota che questo cambierà lo sha1 di quel commit così come tutti i bambini – in altre parole, questo riscrive la cronologia da quel punto in poi. Puoi rompere i repository facendo questo, ma se non hai spinto, non è un grosso problema.