Git Rebase

Sirve para actualizar el punto donde creamos una rama.

Lo normal es usar el rebase para evitar los conflictos entre ramas al hacer merge. Se usa para cambiar el punto base de donde empieza la rama que queremos unir (por ejemplo) al master cuando el master tiene commits con los que puede haber conflicto.

git-rebase-1.png git-rebase-2.png git-rebase-3.png git-rebase-4.png

Primero se mueve a la rama que se quiere reubicar

git checkout rama-nombre

Con git rebase se indica sobre que rama se va a reubicar

git rebase master

Y ya se puede ir a la rama master y hacer el merge de tipo fast-forward

git checkout master
git merge rama-nombre

Rebase - Unir dos commits

Con un rebase interactivo se pueden hacer modificaciones a los commits, como renombrarlos o hasta fusionarlos. Con el comando siguiente se indica que se quiere hacer un rebase interactivo a los últimos 4 commits

git rebase -i HEAD~4

Con el comando squash se indica que ese commit se debe fusionar con el commit anterior, luego el sistema pedirá modificar el mensaje del nuevo commit.

git-rebase-squash.png

Puede que sea necesario después de hacer un rebase interactivo asegurarse que el HEAD está apuntando a la posición correcta

git checkout master

Rebase - Dividir un commit

Para editar un commit y dividirlo se usa tambien git rebase

git rebase -i HEAD~1

git-rebase-edit-1.png

Al usar el comando edit, el sistema avisa que luego de hacer todas las modificaciones que necesite para terminar debe ejecutar

git rebase --continue

git-rebase-edit-2.png

En este ejemplo se quiere dividir un commit en 2 (uno por cada archivo modificado), entonces se reinician los cambios del commit sin eliminar las modificaciones

git-rebase-edit-3.png

git-rebase-edit-4.png

Se procede a crear cada uno de los nuevos commits y para terminar se llama a git rebase

git add README.md
git commit -m "mensaje 1"
git add villanos.md
git commit -m "mensaje 2"
git rebase --continue