Il motivo più importante per effettuare commit frequenti, piccoli e significativi è di aiutare a comprendere la storia del codice. In particolare, è molto difficile capire come è cambiato il codice se è difficile generare differenze comprensibili.
L'opzione 1 offusca la cronologia delle modifiche apportate, ma in caso contrario non causerà alcun problema.
L'opzione 2 offusca la cronologia delle modifiche apportate, possibilmente un po 'meno dell'opzione 1, ma potrebbe causare altri problemi a se stessi o agli altri se assumono o concludono in altro modo che i commit sono distinti, ad esempio possono essere uniti in altri rami in modo indipendente. A meno che non ci sia una forte ragione pratica per cui questo è preferito rispetto all'opzione 1, questo è meno ideale di esso.
L'opzione 3 è la migliore, a parità di altre condizioni, ma se, come descritto altrove, ciò richiederebbe quantità di tempo "estreme" o comporterebbe altri costi significativi, dovresti valutare tali costi con i benefici previsti di creare impegni più puliti.
In base alle informazioni che hai fornito, sceglierei l'opzione 1. Forse dovresti impostare dei promemoria che ti chiedono di confermare le modifiche?
Prototipazione e riscrittura
Un'altra considerazione da tenere a mente, soprattutto alla luce della tua nota sull'essere l'unico programmatore, e il mio sospetto che tu stia lavorando su una base di codice relativamente nuova, è che probabilmente è bene sviluppare abitudini diverse rispetto a commettere cambiamenti per quando stai prototipando un nuovo codice rispetto a mantenere o estendere il codice esistente. Probabilmente non c'è una divisione terribilmente netta tra i due, ma penso che sia ancora una distinzione utile.
Quando stai prototipando un nuovo codice, esegui il commit ogni volta che desideri salvare le modifiche, quasi certamente in un ramo, ma forse in un progetto separato. O forse anche solo lavorare al di fuori del controllo della versione. Puoi invece concentrarti sulla raccolta di prove sulla fattibilità di varie ipotesi o progetti che stai prendendo in considerazione. Scrivo spesso piccoli prototipi utilizzando strumenti diversi, ad esempio LINQPad anziché Visual Studio per codice C #.
Quando hai convalidato una particolare ipotesi o disegno, riscrivilo nel tuo progetto principale, idealmente in un ramo, e fai i piccoli, significativi impegni che aiuteranno meglio la comprensione degli altri (incluso il tuo futuro) sulla natura dei cambiamenti stai facendo.