- Git rebase
- Antes de rebase
- regular rebase
- Interactive rebase
- Force-push
- Merge conflicts
Esta guía le ayuda a comenzar con el rebase, forzando, y arreglando conflictos localmente.
antes de sumergirse en este documento, asegúrese de estar familiarizado con el uso de git a través de la línea de comandos.
Git rebase
rebase es una operación muy común inGit., Existen las siguientes opciones de rebase:
- rebase Regular.
- rebase interactivo.
Antes de reajuste
git rebase
reescribe la confirmación de la historia. Puede ser perjudicial hacerlo en ramas compartidas. Puede causar conflictos de fusión complejos y difíciles de resolver. En estos casos,en lugar de Reorganizar su rama contra la rama predeterminada, considere tirar de ella en su lugar (git pull origin master
). Tiene un efecto similar sin comprometer el trabajo de sus colaboradores., es más seguro hacer una copia de seguridad de tu rama antes de cambiar de base para asegurarte de no perder ningún cambio. Por ejemplo, considere una característica branchcalled my-feature-branch
:
-
Abra su rama en el terminal:
git checkout my-feature-branch
-
Checkout una nueva rama de la misma:
git checkout -b my-feature-branch-backup
-
volver a la original de agencia:
git checkout my-feature-branch
Ahora usted puede de manera segura reajuste de la misma., Si algo sale mal, puede recuperar sus cambios restableciendo my-feature-branch
contra my-feature-branch-backup
:
tenga en cuenta que si agregó cambios a my-feature-branch
después de crear la rama de copia de seguridad,los perderá al restablecer.
rebase Regular
con un rebase regular puedes actualizar tu rama de características con el defaultbranch (o cualquier otra rama).Este es un paso importante para las estrategias de desarrollo basadas en Git., Puede asegurarse de que los cambios que está agregando a la base de código no rompan ningún cambio existente agregado a la rama de destino después de crear su featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
Cuando rebases:
- Git importa todas las confirmaciones enviadas a
master
después del momento, creaste tu rama de características hasta el momento presente. - Git pone el cometa tiene en su rama en la parte superior de todoel comete importados de
master
:
puede reemplazar master
con cualquier otra rama que desea reajustar contra, porejemplo, release-10-3
., También puede reemplazar origin
con otros remoterepositories, por ejemplo, upstream
. Para comprobar qué controles remotos ha vinculado a su localrepository, puede ejecutar git remote -v
.
si hay conflictos de fusión, Git le pide que los corrija antes de continuar con el rebase.
para obtener más información, consulte la documentación de Git sobre las estrategias de rebasing y rebasing.
rebase interactivo
puede usar rebase interactivo para modificar confirmaciones. Por ejemplo, modificar un commitmessage, squash (unir varios commits en uno), editar o eliminar commits., Usa una rebase para cambiar los mensajes de confirmación pasados y organizar el historial de confirmación de tu rama para mantenerlo limpio.
cuando quieras cambiar algo en confirmaciones recientes, usa interactiverebase pasando la bandera --interactive
(o -i
) al comando rebase.,
Por ejemplo, si desea editar los tres últimos se compromete en su rama(HEAD~3
), escriba:
git rebase -i HEAD~3
Git abre los últimos tres compromete en su terminal editor de texto y describesall interactivo de reajuste de las opciones que puede utilizar. La opción predeterminada es pick
, que mantiene la confirmación Sin cambios. Reemplace la palabra clave pick
según la operación que desee realizar en cada confirmación. Para hacerlo, necesitas editar las confirmaciones en el editor de texto de tu terminal.,
por ejemplo, si está utilizando Vim como editor de texto en una shell de macOS ZSH
y desea aplastar las tres confirmaciones(unirlas en una):
- presione ion su teclado para cambiar al modo de edición de Vim.
- Navegue con las flechas de tu teclado para editar el segundo cometer keywordfrom
pick
asquash
(os
). Haz lo mismo con el tercer commit.El primer commit debe quedar sin cambios (pick
) ya que queremos aplastar el segundo y el tercero en el primero., - pulse Escape para salir del modo de edición.
- escriba
:wq
para» escribir «(guardar) y»salir». - Git emite el mensaje de confirmación para que tengas la oportunidad de editarlo:
- Todas las líneas que comienzan con
#
se ignoran y no se incluyen en el mensaje de confirmación. Todo lo demás está incluido. - para dejarlo como está, escriba
:wq
. Para editar el mensaje de confirmación: cambie al modo de edición, edite el mensaje de confirmación y guárdelo como lo acaba de hacer.,
- Todas las líneas que comienzan con
- Si usted no ha empujado a sus compromete a la rama remota antes de reajuste,empujar los cambios normalmente. Si ya has empujado estas confirmaciones,force-push en su lugar.
tenga en cuenta que los pasos para editar a través de la línea de comandos pueden ser ligeramente diferentes dependiendo de su sistema operativo y el shell que esté utilizando.
vea numerosas posibilidades de deshacer en Gitpara una mirada más profunda en el rebase interactivo.,
Force-push
cuando realice operaciones más complejas, por ejemplo, squash commits, reset orrebase su rama, debe forzar una actualización a la rama remota.Estas operaciones implican reescribir el historial de confirmaciones del branch.To forzar una actualización, pasar la bandera --force
o -f
al comando push
. Por ejemplo:
git push --force origin my-feature-branch
Forzar una actualización no es recomendable cuando se trabaja en sharedbranches.
alternativamente, puede pasar la bandera --force-with-lease
en su lugar., Es más seguro,ya que no sobrescribe ningún trabajo en la franja remota si alguien más agregó más commits a la rama remota:
git push --force-with-lease origin my-feature-branch
si la rama que desea forzar-push está protegida, no puede forzar-push a menos que primero la desprotecte. Entonces usted puede forzar-empujar y volver a protegerlo.,
Merge conflicts
como Git se basa en la comparación de versiones de una fileline por línea, cada vez que una línea cambiada en su rama coincide con la sameline cambiada en la rama de destino (después del momento en que creó su rama de Característica A partir de ella), Gitidentifica estos cambios como un conflicto de fusión. Para arreglarlo, debe elegir cuál versión de esa línea desea mantener.
La mayoría de los conflictos se pueden resolver a través de la interfaz de usuario de GitLab.
para casos más complejos, hay varios métodos para resolverlos. También hay aplicaciones Git GUI que pueden ayudar visualizando las diferencias.,
Para solucionar los conflictos a nivel local, puede utilizar el método siguiente:
-
Abra el terminal de salida y su rama, por ejemplo,
my-feature-branch
:git checkout my-feature-branch
-
Reajuste de su sucursal en contra de la bifurcación de destino para Gitprompts con los conflictos:
git rebase origin/master
- Abra el archivo en conflicto en un editor de código de su preferencia.
- Busque el conflicto del bloque:
- comienza con el marcador:
<<<<<<< HEAD
., - a continuación, está el contenido con sus cambios.
- El marcador:
=======
indica el final de sus cambios. - a continuación, se muestra el contenido de los últimos cambios en la rama de destino.
- El marcador
>>>>>>>
indica el final del conflicto.
- comienza con el marcador:
- edite el archivo: elija qué versión (antes o después de
=======
) desea guardar y, a continuación, elimine la parte del contenido que no desea en el archivo. - Eliminar los marcadores.
- guardar el archivo.,
- repita el proceso si hay otros archivos en conflicto.
-
la Etapa de los cambios:
git add .
-
confirmar los cambios:
git commit -m "Fix merge conflicts"
-
Continuar reajuste:
git rebase --continue
cautionUp a este punto, puede ejecutargit rebase --abort
para detener el proceso.Git aborta el rebase y devuelve la rama al estado que tenía antes de ejecutargit rebase
.,Después de ejecutargit rebase --continue
el rebase no se puede abortar. - fuerza-empuje a su rama remota.
Leave a Reply