Cuando trabajo en una solución o una característica, a veces me tropiezo con otros pequeños problemas que se pueden mejorar sobre la marcha en cuestión de segundos. Cuando los hago de inmediato y luego confirmo la función / corrección finalizada, la confirmación incluye más de una cosa. Por ejemplo "add feature X and code clean up"o "fix bug X and improved logging". Sería mejor dividir esto en dos commits. En caso de que los dos cambios ocurrieran en el mismo archivo, no puedo simplemente agregar un archivo, confirmar, agregar el otro y luego confirmar nuevamente. Entonces veo las siguientes tres opciones:
Pase por alto deliberadamente cosas no relacionadas mientras trabaja en algo.
Copie el archivo con dos cambios, revertirlo, incluir un cambio, confirmar, incluir el otro cambio, confirmar nuevamente.
No cambie cosas pequeñas no relacionadas, agréguelas a una lista de tareas pendientes y hágalo más tarde.
Realmente no me gustan las tres opciones, debido a las siguientes razones:
La calidad del código puede sufrir si uno no soluciona pequeños problemas. Y me siento mal si conscientemente pierdo la oportunidad de mejorar algo sin mucho esfuerzo.
Esto aumenta el trabajo manual y es propenso a errores.
Esto está bien para todos no tan pequeños, pero agregar un pequeño elemento a una lista de tareas pendientes y volver a visitarlo más tarde a menudo lleva mucho más tiempo que simplemente solucionarlo de inmediato.
¿Cómo manejas esas situaciones?
git add -pmucho, lo que me permite seleccionar interactivamente las partes de los archivos que quiero comprometer. Si la limpieza está suficientemente separada, esto es fácil de hacer. Si la separación es más difícil, confirmo el estado en una rama temporal, luego agrego manualmente los cambios a mi rama real hasta que no haya diferencias en la rama temporal. Esto requiere mucho más trabajo, pero me permite verificar que cada commit funcione por sí solo.