Che sistema di controllo della versione stai usando? I popolari sistemi di controllo delle versioni distribuite come Git o Mercurial distinguono tra commit e push, mentre SVN (Subversion) no.
La parte importante è ciò che i commit finiscono nel repository condiviso. Idealmente, nessun commit che interrompe la compilazione dovrebbe mai essere spinto. E l'applicazione dovrebbe anche funzionare, altrimenti solo spingendoti a fermare altri sviluppatori. E, idealmente, dovrebbe passare tutto il test, soprattutto quelli che erano prima.
Prima di spingere, in molti DVCS come Git, puoi fare tutto ciò che vuoi, ma cerco lo stesso di sopra. Ma puoi commettere commit errati e poi modificarli in seguito con uno o più commit. A volte faccio commettere errori e li spingo su un server separato, se devo continuare a lavorare su un altro computer. Quindi modifico il codice e, una volta fatto, annullo il commit interrotto e faccio un bel commit.
Puoi anche utilizzare diversi rami, come i rami delle caratteristiche, in modo che gli sviluppatori possano lavorare su diverse parti del sistema e spingere senza disturbare altri sviluppatori. Poi, quando la funzione è completata, tutto si compila, tutti i test passano, puoi unire i commit in un ramo principale.
Ma la soluzione migliore per non avere lunghi periodi di codice non funziona è non entrare mai nella situazione. Raggiungi una situazione in cui tutto funziona. Da questa situazione di lavoro, prova a suddividere il lavoro in modifiche incrementali più piccole, in cui ogni modifica si traduce in una nuova situazione in cui tutto funziona ancora.