Come posso dividere un impegno Git seppellito nella storia?

Ho approfondito la mia storia e voglio apportarvi alcune modifiche. Il problema è che ho un commit con due modifiche non correlate e questo commit è circondato da alcune altre modifiche nella cronologia locale (non forzata).

Voglio dividere questo commit prima di spingerlo fuori, ma la maggior parte delle guide che sto vedendo hanno a che fare con la divisione del commit più recente o delle modifiche locali senza commit. È fattibile fare questo a un impegno che è sepolto nella storia un po ‘, senza dover “rifare” i miei commit da allora?

C’è una guida alla suddivisione dei commit nella manpage di rebase . Il sumrio rapido è:

  • Esegui un rebase interattivo includendo il commit del target (es. git rebase -i ^ branch ) e contrassegnalo per essere modificato.

  • Quando il rebase raggiunge quel commit, usa git reset HEAD^ per resettare prima del commit, ma mantieni intatto l’albero di lavoro.

  • Aggiungete incrementalmente le modifiche e confermatele, eseguendo il numero di commit desiderato. add -p può essere utile per aggiungere solo alcune delle modifiche in un determinato file. Usa commit -c ORIG_HEAD se vuoi riutilizzare il messaggio di commit originale per un certo commit.

  • Se vuoi testare ciò che stai commettendo (buona idea!) Usa git stash per hide la parte che non hai impegnato (o stash --keep-index prima ancora di impegnarlo), test, quindi git stash pop per restituire il resto all’albero di lavoro. Continua a fare commit finché non hai commesso tutte le modifiche, cioè hai un albero di lavoro pulito.

  • Esegui git rebase --continue – continua a procedere all’applicazione dei commit dopo il commit now-split.

Se non hai ancora spinto, usa semplicemente git rebase . Ancora meglio, usa git rebase -i per spostare i commit in modo interattivo. Puoi spostare il commit offendente in primo piano, quindi dividerlo a tuo piacimento e spostare di nuovo le patch (se necessario).