Quando lavoro su una correzione o una funzionalità, a volte inciampo su altri piccoli problemi che possono essere migliorati al volo in pochi secondi. Quando li eseguo immediatamente e quindi eseguo il commit della funzione / correzione finita, il commit include più di una cosa. Ad esempio "add feature X and code clean up"
o "fix bug X and improved logging"
. Sarebbe meglio dividerlo in due commit. Nel caso in cui le due modifiche fossero avvenute nello stesso file, non posso semplicemente aggiungere un file, eseguire il commit, aggiungere l'altro e quindi eseguire nuovamente il commit. Quindi vedo le seguenti tre opzioni:
Trascurare deliberatamente cose non correlate mentre si lavora su qualcosa.
Copia il file con due modifiche, ripristinalo, includi una modifica, esegui il commit, includi l'altra modifica, esegui nuovamente il commit.
Non modificare piccole cose non correlate, ma aggiungerle a una lista di cose da fare e farlo in un secondo momento.
Non mi piacciono davvero tutte e tre le opzioni, per i seguenti motivi:
La qualità del codice può soffrire se non si risolvono piccoli problemi. E mi sento male se mi manca consapevolmente la possibilità di migliorare qualcosa senza troppi sforzi.
Ciò aumenta il lavoro manuale ed è soggetto a errori.
Questo va bene per todos non così piccoli, ma l'aggiunta di un piccolo elemento a un elenco di cose da fare e la rivisitazione in un secondo momento spesso richiede molto più tempo rispetto alla semplice correzione immediata.
Come gestite tali situazioni?
git add -p
molto che mi consente di selezionare in modo interattivo le parti dei file che voglio impegnare. Se la pulizia è sufficientemente separata, questo è facile da fare. Se la separazione è più difficile, commetto lo stato su un ramo temporaneo, quindi aggiungo manualmente le modifiche al mio ramo effettivo fino a quando non ci sono differenze nel ramo temporaneo. Ciò richiede molto più lavoro, ma mi consente di verificare che ogni commit funzioni da solo.