El cambio de base es un proceso para volver a aplicar confirmaciones además de otro viaje base. Se utiliza para aplicar una secuencia de confirmaciones de distintas ramas en una confirmación final. Es una alternativa al comando git merge. Es un proceso lineal de fusión.
En Git, el término rebase se refiere al proceso de mover o combinar una secuencia de confirmaciones a una nueva confirmación base. Rebasar es muy beneficioso y visualiza el proceso en el entorno de un flujo de trabajo de ramificación de funciones.
Es bueno cambiar la base de su rama antes de fusionarla.
Generalmente, es una alternativa al comando git merge. La fusión es siempre un registro que cambia hacia adelante. Comparativamente, rebase es una convincente herramienta de reescritura de historial en git. Fusiona las diferentes confirmaciones una por una.
Supongamos que ha realizado tres confirmaciones en su rama maestra y tres en su otra rama llamada prueba. Si fusiona esto, fusionará todas las confirmaciones a la vez. Pero si lo cambias de base, se fusionará de forma lineal. Considere la siguiente imagen:
La imagen de arriba describe cómo funciona git rebase. Las tres confirmaciones de la rama maestra se fusionan linealmente con las confirmaciones de la rama de prueba.
La fusión es la forma más sencilla de integrar las sucursales. Realiza una fusión de tres vías entre las dos últimas confirmaciones de rama.
Cómo rebase
Cuando realizó algunas confirmaciones en una rama de función (rama de prueba) y algunas en la rama maestra. Puede cambiar la base de cualquiera de estas ramas. Utilice el comando git log para realizar un seguimiento de los cambios (historial de confirmaciones). Pague en la sucursal deseada que desea cambiar de base. Ahora ejecute el comando rebase de la siguiente manera:
Sintaxis:
$git rebase
Si hay algunos conflictos en la rama, resuélvalos y ejecute los siguientes comandos para continuar con los cambios:
$ git status
Se utiliza para comprobar el estado,
$git rebase --continue
El comando anterior se utiliza para continuar con los cambios que realizó. Si desea omitir el cambio, puede omitir lo siguiente:
ddl frente a dml
$ git rebase --skip
Cuando se complete el rebase. Empuje el repositorio al origen. Considere el siguiente ejemplo para comprender el comando git merge.
Supongamos que tiene una sucursal, digamos prueba2 en el que estás trabajando. Ahora estás en la rama test2 y has realizado algunos cambios en el archivo del proyecto. nuevoarchivo1.txt .
Agregue este archivo al repositorio:
$ git add newfile1.txt
Ahora, confirma los cambios. Utilice el siguiente comando:
$ git commit -m 'new commit for test2 branch.'
La salida se verá así:
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
Cambie la rama a maestra:
$ git checkout master
Producción:
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
Ahora estás en la rama maestra. He agregado los cambios a mi archivo, dice nuevoarchivo.txt . El siguiente comando se utiliza para agregar el archivo al repositorio.
secuencia de fibonacci java
$ git add newfile.txt
Ahora confirme el archivo para realizar cambios:
$ git commit -m ' new commit made on the master branch.'
Producción:
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
Para verificar el historial de registros, ejecute el siguiente comando.
$ git log --oneline
Producción:
Como podemos ver en el historial de registros, hay una nueva confirmación en la rama maestra. Si quiero cambiar la base de mi rama test2, ¿qué debo hacer? Vea el siguiente escenario de rama de rebase:
Rebase Branch
Si tenemos muchos commits de distintas ramas y queremos fusionarlos en uno. Para hacerlo, tenemos dos opciones: podemos fusionarlo o cambiar su base. Es bueno cambiar la base de tu sucursal.
En el ejemplo anterior, nos hemos comprometido con la rama master y queremos cambiar su base en la rama test2. Veamos los siguientes comandos:
$ git checkout test2
Este comando lo conectará a la rama test2 desde el maestro.
Producción:
Switched to branch 'test2.'
Ahora estás en la rama test2. Por lo tanto, puede cambiar la base de la rama test2 con la rama master. Vea el siguiente comando:
$ git rebase master
Este comando cambiará la base de la rama test2 y se mostrará como Aplicando: nueva confirmación en la rama test2 . Considere el siguiente resultado:
Producción:
Git Interactive Rebase
Git facilita con Interactive Rebase; es una potente herramienta que permite diversas operaciones como editar, reescribir, reordenar, y más sobre confirmaciones existentes. Interactive Rebase solo se puede operar en la sucursal actualmente registrada. Por lo tanto, configure su sucursal HEAD local en la barra lateral.
La rebase interactiva de Git se puede invocar con el comando rebase, simplemente escriba -i junto con el comando de rebase. Aquí ' i ' significa interactivo. La sintaxis de este comando se proporciona a continuación:
Sintaxis:
$ git rebase -i
Enumerará todas las opciones interactivas disponibles.
Producción:
Después del resultado proporcionado, se abrirá un editor con las opciones disponibles. Considere el siguiente resultado:
tipos de datos de secuela
Producción:
Cuando ejecutamos el comando git Interactive rebase, se abrirá su editor de texto predeterminado con el resultado anterior.
Las opciones que contiene se enumeran a continuación:
- Elegir
- Expresar en otras palabras
- Editar
- Calabaza
- Arreglar
- ejecutivo
- Romper
- Gota
- Etiqueta
- Reiniciar
- Unir
Las opciones anteriores realizan sus tareas específicas con git-rebase. Entendamos brevemente cada una de estas opciones.
Elija (-p):
Pick significa aquí que el compromiso está incluido. El orden de las confirmaciones depende del orden de los comandos de selección durante la rebase. Si no desea agregar una confirmación, debe eliminar la línea completa.
Reformular (-r):
La nueva redacción es bastante similar al comando de selección. La opción de reformulación detuvo el proceso de rebase y brinda la oportunidad de modificar el mensaje de confirmación. No afecta los cambios realizados por la confirmación.
Editar(es):
La opción de edición permite modificar la confirmación. La enmienda significa que las confirmaciones se pueden agregar o cambiar por completo. También podemos realizar confirmaciones adicionales antes del comando de continuación de rebase. Nos permite dividir un compromiso grande en un compromiso más pequeño; además, podemos eliminar cambios erróneos realizados en una confirmación.
Calabaza (-s):
La opción squash le permite combinar dos o más confirmaciones en una sola confirmación. También nos permite escribir un nuevo mensaje de confirmación para describir los cambios.
Reparación (-f):
Es bastante similar al comando squash. Descartó el mensaje del compromiso que se fusionará. El mensaje de confirmación anterior se utiliza para describir ambos cambios.
Ejecutivo (-x):
La opción exec le permite ejecutar comandos de shell arbitrarios contra una confirmación.
Romper (-b):
La opción de ruptura detiene el rebase en la posición justa. Continuará rebase más tarde con ' git rebase --continue ' dominio.
Gota d):
La opción de soltar se utiliza para eliminar la confirmación.
Etiqueta (-l):
La opción de etiqueta se utiliza para marcar la posición actual de la cabeza con un nombre.
Restablecer (-t):
La opción de reinicio se utiliza para restablecer el cabezal a una etiqueta.
creación de instancias en java
GitMerge frente a Rebase
Una de las preguntas desconcertantes más comunes para los usuarios de git es cuándo usar el comando merge y cuándo usar rebase. Ambos comandos son similares y ambos se utilizan para fusionar las confirmaciones realizadas por las diferentes ramas de un repositorio.
No se recomienda el cambio de base en una rama compartida porque el proceso de cambio de base creará repositorios inconsistentes. Para las personas, cambiar la base puede resultar más útil que fusionar. Si desea ver el historial completo, debe utilizar la combinación. Merge rastrea todo el historial de confirmaciones, mientras que rebase reescribe uno nuevo.
Los comandos de Git rebase se indican en lugar de git merge. Sin embargo, tienen algunas diferencias clave:
Fusionar Git | Git Rebase |
---|---|
La fusión crea un compromiso final al fusionarse. | Git rebase no crea ningún compromiso al rebase. |
Fusiona todas las confirmaciones en una sola confirmación. | Crea una pista lineal de confirmaciones. |
Crea una historia gráfica que puede resultar un poco compleja de entender. | Crea una historia lineal que puede entenderse fácilmente. |
Es seguro fusionar dos ramas. | Git 'rebase' se ocupa de la operación severa. |
La fusión se puede realizar tanto en sucursales públicas como privadas. | Es una elección equivocada utilizar la rebase en las sucursales públicas. |
La fusión integra el contenido de la rama característica con la rama maestra. Por lo tanto, la rama maestra cambia y el historial de la rama característica sigue siendo coherente. | El cambio de base de la rama maestra puede afectar la rama característica. |
La fusión preserva la historia. | Rebasar reescribe la historia. |
Git merge presenta todos los conflictos a la vez. | Git rebase presenta conflictos uno por uno. |