Bienvenido a nuestra guía definitiva de los comandos git merge
y git rebase
. Este tutorial te enseñará todo lo que necesitas saber sobre la combinación de múltiples ramas con Git.
Git Merge
el comando git merge
fusionará cualquier cambio que se haya realizado en la base de código en una rama separada con tu rama actual como una nueva confirmación.,
la sintaxis del comando es la siguiente:
git merge BRANCH-NAME
por ejemplo, si actualmente está trabajando en una rama llamada dev
y desea fusionar cualquier cambio nuevo que se haya realizado en una rama llamada new-features
, emitirá el siguiente comando:
git merge new-features
nota: si hay cambios no confirmados en tu rama actual, git no te permitirá fusionar hasta que todos los cambios en tu rama actual hayan sido confirmados., Para manejar los cambios, usted puede:
Crear una nueva rama y confirmar los cambios
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
Guárdalos
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
Abandonar todos los cambios
git reset --hard # removes all pending changes
Git Rebase
Reajuste de una sucursal en Git es una forma de pasar la totalidad de una rama a otra punto en el árbol. El ejemplo más simple es mover una rama más arriba en el árbol., Digamos que tenemos una rama que diverge de la rama master en el punto a:
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
Cuando rebase puede moverla de esta manera:
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
para rebase, asegúrese de tener todas las confirmaciones que desee en la rebase en su rama master. Echa un vistazo a la rama que quieres rebase y escribe git rebase master
(donde master es la rama en la que quieres rebase)., por ejemplo, una rama que se basó en otra rama (llamémosla característica) se rebasa en master:
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
después de git rebase master branch
o git rebase master
cuando haya comprobado la rama, obtendrá:
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
git rebase interactivo en la consola
para usar git rebase
en la consola con una lista de confirmaciones, puede elegir, editar o soltar en la rebase:
- enter
git rebase -i HEAD~5
con el último número siendo cualquier número de Confirmaciones de más reciente hacia atrás que desea revisar., - en vim, presione
esc
, luegoi
para comenzar a editar la prueba. - En el lado izquierdo puede sobrescribir el
pick
con uno de los comandos a continuación. Si desea aplastar un commit en uno anterior y descartar el mensaje de commit, ingresef
en el lugar delpick
del commit. - guardar y salir del editor de texto.
- cuando se detenga rebase, realice los ajustes necesarios y, a continuación, utilice
git rebase --continue
hasta que rebase tenga éxito., - si se rebasa con éxito, entonces debe forzar la inserción de sus cambios con
git push -f
para agregar la versión rebasada a su repositorio remoto. - si hay un conflicto de fusión, hay varias formas de solucionarlo, incluyendo seguir las sugerencias de esta guía. Una forma es abrir los archivos en un editor de texto y eliminar las partes del código que no desea. A continuación, utilice
git add <file name>
seguido degit rebase --continue
., Puede omitir la confirmación en conflicto ingresandogit rebase --skip
, detener el cambio de base ejecutandogit rebase --abort
en su consola.
Merge Conflicts
Un Conflicto de fusión es cuando realiza confirmaciones en ramas separadas que alteran la misma línea de maneras conflictivas.,la versión del archivo para guardar un mensaje de error similar al siguiente:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Si usted mira la etiqueta resumé.txt
archivo en un editor de código, usted puede ver donde el conflicto se llevó a cabo:
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Git añadido algunas líneas adicionales para el archivo:
<<<<<<< HEAD
=======
>>>>>>> updated_address
Git Merge vs Git Rebase
Ambos git merge
y git rebase
son muy útiles comandos, y uno no es mejor que el otro., Sin embargo, hay algunas diferencias muy importantes entre los dos comandos que usted y su equipo deben tener en cuenta.
Cuando se ejecutagit merge
, se crea una confirmación de fusión adicional. Siempre que esté trabajando en su repositorio local, tener demasiadas confirmaciones de fusión puede hacer que el historial de confirmaciones parezca confuso. Una forma de evitar la confirmación de fusión es usar git rebase
en su lugar.
git rebase
es una característica muy poderosa. Dicho esto, también es arriesgado si no se usa de la manera correcta., git rebase
altera el historial de confirmaciones, así que úsalo con cuidado. Si el cambio de base se realiza en el repositorio remoto, entonces puede crear muchos problemas cuando otros desarrolladores intentan extraer los últimos cambios de código del repositorio remoto. Recuerde ejecutar solamente git rebase
en un repositorio local.
eso es todo lo que necesitas saber para fusionar y rebase con lo mejor de ellos.