Cuando estás haciendo un componente complejo o una funcionalidad en varios pasos, a veces ocurre que la mente se dispersa y sin quererlo, atacas varios frentes a la vez en lugar de ir de uno a uno, por lo que, cuando vas a commitear, acabas mezclando cosas diferentes en el mismo commit, lo cual no es lo ideal, de ahí la necesidad de utilizar git add --patch.

De acuerdo con la documentación de git el comando ejecuta git add --interactive pero omite el menú de comandos inicial y salta directamente al subcomando parche, lo que en esencia significa que, con este comando, en lugar de añadir el archivo en su totalidad directamente, podemos repasar los cambios que se han hecho sobre el mismo de forma interactiva y decidir cuáles queremos añadir al stage para ser commiteados y cuáles no.

Cómo usar --patch

Ejecutando git add <file> -p accedemos a la revisión del archivo, y podemos elegir entre las diferentes opciones para cada uno de los trozos de código en los que se va a dividir, para aceptar o rechazar los cambios o dejadlos sin decidir y pasar al siguiente trozo, entre otras opciones, que son:

  • y - añadir este trozo de código al stage
  • n - no añadir este trozo de código al stage
  • q - salir; no añadir este trozo de código ni ningún otro al stage
  • a - añadir este trozo de código y los siguientes en el fichero al stage
  • d - no añadir este trozo de código ni cualquiera de los siguientes en el fichero al stage
  • g - seleccionar el trozo de código al que queremos ir
  • / - buscar un trozo de código que coincida con una regex
  • j - dejar este trozo de código sin decidir y ver el siguiente trozo de código que esté también sin decidir
  • J - dejar este trozo de código sin decidir y ver el siguiente trozo de código
  • k - dejar este trozo de código sin decidir y ver el trozo de código anterior que esté sin decidir
  • K - dejar este trozo de código sin decidir y ver el trozo de código anterior
  • s - separar este trozo de código en trozos más pequeños
  • e - editar manualmente este trozo de código
  • ? - mostrar auyda

La pega que podemos encontrar es que git nos presenta las modificaciones sobre el archivo agrupadas o divididas dependiendo de su proximidad dentro del archivo, por lo que a veces ocurre que dos modificaciones no relacionadas o que pertenecen a funcionalidades diferentes, están escritas en líneas consecutivas y por lo tanto, no podemos dividir esa partición, que es en realidad la parte que nos gustaría dividir.

Previsualización de git add patch

Para estos casos, las opciones s y e son especialmente útiles. s divide el trozo de código en trozos más pequeños, pero a veces no es suficiente porque necesitamos más granularidad y decidir por nosotros mismos. Es entonces cuando debemos elegir la opción e, que sirve para activar la edición manual, y seguir las instrucciones que nos indican cómo proceder para editar estos trozos de código.

Previsualización del modo de edición manual de git add patch

En nuestro caso, si queremos añadir la segunda línea pero no la tercera, bastará con borrar la línea entera.

De esta manera, aunque hayamos mezclado funcionalidades diferentes, podremos mantener nuestros commits limpios y ordenados por funcionalidades

Previsualización de log de commits del repositorio

Conclusiones

Conocer en profundidad las herramientas con las que trabajamos a diario nos permite mejorar en nuestro día a día y ser más productivos, lo que se traduce en menos agobios y más eficiencia y eficacia a la hora de realizar una tarea o desarrollar un proyecto, lo que a menudo significa terminar el trabajo a tiempo y poder vivir más vida fuera del trabajo, por eso es una buena idea, aunque sea poco a poco, ir indagando y profundizando en el uso de las mismas :)

Para saber más