Cómo ordenar la historia de tus commits en Git

Estamos publicando una traducción del artículo que encontramos en hackernoon.com. Su autor, Thiago Miranda, escribe sobre cómo hacer que trabajar con Git sea más conveniente y eficiente.



Acerca de algunos comandos extremadamente útiles en Git


Durante el último mes he estado haciendo programación de pares y he creado varios cientos de confirmaciones en Git. En el artículo, compartiré lo más importante de lo que aprendí durante este tiempo: hablaré sobre trabajar con la historia de los commits, sobre técnicas exitosas y cómo implementarlas usando una docena de equipos.

1. ¿Cuál es la historia en Git?




Un registro preciso de todas las confirmaciones que contienen cambios realizados en los archivos. En él puede realizar un seguimiento de los cambios específicos y el momento de su introducción o comparar la versión actual con la anterior. ¿Dónde ver la historia? Ingrese el comando a través de Git Bash:

git log --oneline

Si tiene demasiadas confirmaciones, puede cambiar de un comentario a otro utilizando las teclas de flecha o las teclas Re Pág / Av Pág, como en cualquier otro archivo. Para salir, presione la tecla de acceso rápido (q).

2. Acerca de los comentarios sobre commits


No escriba comentarios sin sentido, deben ser concisos y no requieren explicación. Su tarea es indicar qué cambios ha realizado en el código y qué afectan.

  • Cómo no hacerlo: "Fixed index.html"
  • Cómo: "Mejora la velocidad de la barra de navegación"

Veamos para qué sirve esto.
Imagine que está trabajando en un proyecto a gran escala que la mayoría de los especialistas empleados en él ni siquiera lo saben. Desarrolla una nueva característica, la prueba en su equipo y todo funciona bien.

Pero después de un impulso, todo deja de funcionar de repente, y lo primero que verifica son los cambios realizados durante el desarrollo de esta función. En el registro de Git, encontrará muchas confirmaciones con comentarios en el estilo "fijo". ¡Imagínese cuánto tiempo tiene que pasar para encontrar el correcto!

3. Haz siempre commits


Se compromete, se compromete y nuevamente se compromete. Terminada la función: agregar una confirmación, mejorar el estilo de un elemento de bloque, agregar una confirmación, etc. Idealmente, debe enviar un compromiso con cada cambio.

Quizás estés pensando: ¿por qué hay tantos commits? La razón principal es que su nueva funcionalidad puede entrar en conflicto con el código de otra persona, pero si siempre comete pequeños cambios, será más fácil encontrarlos y corregirlos. Esto le ahorra tiempo al rastrear docenas o cientos de líneas modificadas en la misma confirmación.

4. Corrija el último comentario sobre el commit


¿Qué sucede si, después de agregar una pequeña confirmación a su repositorio local, desea corregir el error tipográfico o hacer un comentario sobre la confirmación con más detalle? Hacer cambios es bastante simple con el comando:

git commit -m “correct message” --amend

Nota: si ya ha comenzado a comprometerse con un repositorio remoto, es mejor no usar este comando.

Consulte la documentación oficial para más detalles .

5. Combina los últimos X commits en uno


Situación: al enviar una confirmación a una nueva función, comprende que necesita un pequeño cambio más, hacer cambios mínimos y confirmar nuevamente ... Como resultado, 5 confirmaciones son casi lo mismo. ¿Ocurrió? Tales confirmaciones se eliminan de la vista general de su historia en Git, pero si lo desea, se pueden solucionar fácilmente con el comando:

git reset HEAD~3

El comando HEAD ~ 3 revierte 3 confirmaciones principales, incluida la más reciente. En este ejemplo, sus últimas tres confirmaciones se eliminarán del registro, pero los cambios en el código permanecerán en su lugar. Ahora es el momento de ver qué código necesita confirmar, para esto ingresamos el comando:

git stage --diff

Verá que todos los cambios en las confirmaciones que eliminó del historial ahora están indexados, por lo que puede confirmarlos nuevamente, esta vez de una sola vez.

Tenga en cuenta que HEAD generalmente se refiere a la última confirmación que agregó. Si no está seguro, consulte el registro de Git. Si su última confirmación se congeló (no es el caso más común), el comando HEAD ~ 1 borrará todas las confirmaciones de la rama congelada. Para obtener más información, consulte la documentación.

6. Eliminar el último commit con cambios


Tenga cuidado, ya que este método borrará todos los cambios sin la capacidad de retroceder. Generalmente se usa después de experimentar con el código si su resultado no cumple con las expectativas. Te recomiendo que primero lo intentes en el repositorio de sandbox.

git reset –-hard HEAD~1

Ahora se ha eliminado su última confirmación, así como todos los cambios relevantes en el código.

7. Limpia tu historial de confirmaciones


La forma más eficiente de borrar el historial de confirmación es usar el comando rebase. Tenga cuidado: puede eliminar una confirmación presionando accidentalmente la tecla incorrecta. Entonces, ejecutemos rebase interactivamente (bandera -i) con el comando:

git rebase -i HEAD~5



Tan pronto como lo ingrese, verá una lista de los últimos 5 commits (HEAD ~ 5) dentro del terminal. Todos los commits se ordenan por fecha, es decir, el más nuevo estará en la parte superior (esta lista se abre usando Vim, el editor de texto Git predeterminado que permite editar archivos de texto dentro del terminal). Y aquí hay una breve instrucción con varios comandos útiles. En la mayoría de los casos, necesitará los comandos squash y reword.

Reemplazar el comando pick con el comando squash eliminará este commit del registro, y todos los cambios en el código se agruparán con el último commit resaltado por el comando pick.

Si desea ajustar el comentario, puede reemplazar el comando pick con el comando reword y volver a escribir el comentario.

Ahora puede ir a la siguiente ventana, donde necesita escribir un comentario para el grupo de confirmaciones que va a pegar usando squash. Para continuar, presione ESC e ingrese:

:wq!

Se (:)necesitan dos puntos para indicar que desea transmitir el comando, (w)escribir (guardar) los cambios, (q)salir y (!)ejecutar el comando.

Tenga en cuenta que cada grupo de compromiso recibirá su comentario. El resultado se puede verificar en el registro de Git.

Si por alguna razón abandona esta ventana sin completar la operación, puede regresar en cualquier momento con el comando:

git rebase --edit

Si desea salir de la ventana sin guardar los cambios, presione la tecla ESC e ingrese:

:q!

Vim recibirá un comando para cerrar el archivo sin guardar.

8. Gestionar la indexación


Por lo general, debe enviar confirmaciones a un solo archivo o a un grupo de archivos relacionados. Pero entonces, ¿cómo hacer cambios rápidamente durante la indexación?

Digamos que tiene 3 archivos, y solo 2 de ellos necesitan ser confirmados. En este caso, puede probar el siguiente comando:

git add .

Ahora elimine el archivo que no necesita de la indexación:

git reset -- Readme.txt

Y verifica el resultado:

git status

Agregue todos los archivos de alguna extensión, por ejemplo CSS:

git add *.css

¿Agregó todo por error? Luego borre el índice con el comando:

git reset --

Si necesita operaciones más complejas, puede agregar archivos al índice utilizando el modo de diálogo:

git add -i

Primero, seleccione una opción ingresando el número apropiado, por ejemplo (3), para revertir sus acciones.

Al seleccionar una opción, puede ingresar una lista de archivos que desea eliminar de la indexación, uno tras otro.

Cuando termine, presione (Entrar).

Los archivos se agregan de la misma manera. Usando la opción (4) agregue un archivo sin seguimiento.

Para salir, ingrese al (q)menú de opciones.

9. Conclusión


Lo principal que debe hacer antes de pasar a un repositorio remoto, y especialmente antes de fusionar su rama, es asegurarse de ordenar el historial de confirmación. Una vez que inserta todo en un repositorio remoto, no se puede arreglar nada.

¿Desea obtener más información sobre la programación de pares y comenzar de forma remota? Echa un vistazo a Microverse.org .

All Articles