Error en commit ... ¿Cómo solucionarlo? Un desastre en la historia de los commits ... ¿Cómo hacer que todo parezca decente? El autor del artículo, cuya traducción publicamos hoy, dice que fue escrito específicamente para aquellos que hicieron tales preguntas. Según él, después de estudiar las técnicas para trabajar con Git presentadas aquí, puede avanzar significativamente en el camino del desarrollo de Git.
Se supone que el lector de este artículo ya está familiarizado con los conceptos básicos de Git. Si esto no es así, primero se recomienda dominar la base, por ejemplo, utilizando
este material.
Corregir errores en commits
Aquí veremos varios escenarios para errores en commits y su corrección.
▍ Escenario número 1
Suponga que confirmó muchos archivos y se dio cuenta de que el mensaje de confirmación no era muy claro. Después de eso, decidiste cambiar este mensaje. Para hacer esto, use el
git commit --amend
. Aquí hay un ejemplo de su aplicación:
git commit --amend -m "New commit message"
▍ Escenario número 2
Supongamos que desea comprometer seis archivos, pero cometió por error solo cinco. Parece que puede solucionar este error simplemente creando una nueva confirmación y agregando el sexto archivo que falta allí.
Este enfoque tiene derecho a la vida. Pero para mantener el historial de confirmación en buenas condiciones, probablemente sería mucho mejor poder agregar un archivo omitido al azar a la misma confirmación. Esto se puede hacer, nuevamente, con el
git commit --amend
. Su uso se ve así:
git add file6 git commit
El indicador
--no-edit
significa que el mensaje de confirmación no cambia.
▍ Escenario número 3
Las confirmaciones que se realizan en Git están vinculadas al nombre del autor y su dirección de correo electrónico. Típicamente, estos datos se indican realizando la configuración inicial de Git. Como resultado, aquellos que usan Git pueden, al ejecutar cada confirmación, no les importa la información sobre su autor.
Además, es muy posible que cuando trabaje con algunos proyectos, necesite usar información sobre el autor, por ejemplo, una dirección de correo electrónico que difiera de las principales. Para dicho proyecto, debe especificar una dirección de correo electrónico con este comando:
git config user.email "your email id"
Supongamos que olvidó hacer esta configuración y ya realizó la primera confirmación. Corregir la situación ya puede ser familiar para nosotros
amend
equipo. Al usarlo, puede cambiar la información sobre el autor de la confirmación anterior:
git commit --amend --author "Author Name <Author Email>"
▍ Nota
Use el comando
amend
solo en su repositorio local. Su uso en repositorios remotos puede generar una enorme confusión.
Poner orden en la historia de commits
Supongamos que está trabajando en un código para un proyecto. Sabes que tomará unos diez días. Durante estos diez días, otros desarrolladores se comprometen con el repositorio de origen.
Se recomienda mantener la sincronización entre los repositorios locales y remotos. Esto evita los muchos conflictos de fusión que surgen cuando los repositorios son demasiado raros para sincronizar. Siguiendo esta práctica, decide descargar los cambios desde el repositorio remoto cada dos días.
Cada vez que descarga código de un repositorio remoto al local, se crea una nueva confirmación de fusión en el repositorio local. Esto significa que en su historial de confirmación local habrá muchas confirmaciones que pueden confundir a la persona que verá su código.
Historial de confirmaciones en el repositorio local¿Cómo ordenar el historial de confirmaciones? Para resolver este problema, puede usar el
git rebase
.
▍Git comando de rebase
Considere el
git rebase
como ejemplo.
Se compromete en la rama Release y en la rama FeatureHay tres commits en la rama
Release
:
Rcommit1
,
Rcommit2
y
Rcommit3
. Creó su rama
Feature
desde la rama
Release
cuando solo tenía una confirmación:
Rcommit1
. Después de eso, agregó dos confirmaciones a la rama
Feature
. Estos son
Fcommit1
y
Fcommit2
. Su objetivo es cargar confirmaciones desde la rama
Release
a su rama
Feature
. Para hacer esto, usará el comando
rebase
.
Utilizaremos la
release
y la
feature
nombres para las dos ramas bajo consideración.
Como resultado, el uso del
rebase
se verá así:
git checkout feature git rebase release
▍ Características del comando rebase
El comando
rebase
usa para garantizar que la rama
Feature
tenga un código nuevo de la rama
Release
.
Al aplicar este comando, el sistema intenta agregar cada confirmación a la rama
Feature
, una a la vez, y buscar conflictos. Si esto suena complicado, veamos la siguiente figura. Esto muestra los mecanismos internos del
rebase
.
Función de ramificación y tres pasos del comando rebasePaso 1
Cuando se llama al comando, la rama
Feature
apunta al encabezado de la rama
Release
. Después de eso, hay tres confirmaciones en la rama
Feature
:
Rcommit1
,
Rcommit2
y
Rcommit3
. Quizás aquí tenga una pregunta sobre lo que sucedió con los
Fcommit1
y
Fcommit2
. Estas confirmaciones no han desaparecido, se utilizarán en los próximos pasos.
Paso 2
Git ahora está tratando de agregar el compromiso
Fcommit1
a la rama
Feature
. Si no hay conflicto,
Fcommit1
agrega después de
Rcommit3
. Si se detecta un conflicto, Git lo informará y deberá resolverlo manualmente.
Paso 3
Después de que el commit
Fcommit1
agrega a la rama
Feature
, Git intenta agregar
Fcommit2
allí
Fcommit2
. Aquí, de nuevo, si no hay conflictos,
Fcommit2
agrega
Fcommit1
después de
Fcommit1
y la operación se completa con éxito. Si se detecta un conflicto, Git, como antes, lo informará y se ofrecerá a solucionarlo.
Una
rebase
comando
rebase
puede ver que hay commits
Rcommit1
,
Rcommit2
,
Rcommit3
,
Fcommit1
y
Fcommit2
en la rama
Feature
.
▍ Nota
Cuando se trabaja con Git, se
rebase
tanto el comando de
merge
como el comando de
rebase
. Esto no quiere decir que uno de ellos sea preferible al otro.
Si usa el comando
merge
, recibirá un commit de
merge
. Si usa
rebase
, no tendrá ninguna
rebase
adicional.
Se recomienda que use estos comandos en diversas situaciones. Por lo tanto,
rebase
es adecuado para actualizar el código del repositorio local basado en el último código del repositorio remoto. Use el comando
merge
para realizar solicitudes de extracción para fusionar la rama
Feature
con la rama
Release
o
Master
.
Resumen
Después de estudiar los conceptos presentados en este artículo, ha mejorado sus habilidades de Git y está más cerca del nivel de un experto en Git. Esperamos que lo que aprendiste aquí te sea útil. Pero el mundo de Git es enorme, por lo tanto, habiendo dominado algo nuevo, no te detengas allí y sigue adelante.
Estimados lectores! ¿Has encontrado un desastre en git commits?
