Creo un archivo y hago commit en la rama principal. Hago lo mismo para añadir un archivo B. Creo una rama otra
en la que creo un archivo C y hago un par de commits. Después hago un checkout
a la principal y hago un merge
. Entonces la cosa queda así:
* 71ce0a4 (HEAD -> main, otra) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
* d37b306 add archivoA
Creo otra rama, otra-mas
y creo un archivo D. Hago, igual que con el C, varios commits
:
* 875d6ce (HEAD -> otra-mas) a lot of noise
* c11a84f more more noise
* 460171c more noise
* 0ef2bfe update again archivoD
* a6eb02a update archivoD
* ee79625 update archivoD
* 57cbfc4 add archivoD
* 71ce0a4 (otra, main) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
* d37b306 add archivoA
Ahora vamos a hacer una comparación con la rama principal con git rebase -i main
. Añado i
para hacerlo de manera interactiva. Actualizo a lo siguiente:
pick 57cbfc4 add archivoD
squash ee79625 update archivoD
squash a6eb02a update archivoD
squash 0ef2bfe update again archivoD
squash 460171c more noise
squash c11a84f more more noise
squash 875d6ce a lot of noise
Para fusionar los commits con squash e incluirlos en el que señalo como pick. Así, el arbol queda sencillamente cómo:
* 8b35b1d (HEAD -> otra-mas) añadir archivoD y otras movidas
* 71ce0a4 (otra, main) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
Es decir, he fusionado todos los commits de la rama otra-mas
en uno solo (''añadir archivoD y otras movidas'').
Finalmente cambio a la rama principal y hago merge
:
* 8b35b1d (HEAD -> main, otra-mas) añadir archivoD y otras movidas
* 71ce0a4 (otra) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
Para usar rebase
, creamos una rama regreso-al-futuro
y después, siguiendo en la principal, hago un commit
. Así es la situación vista desde main
:
* 465e237 (HEAD -> main) adiós archivoA
* 8b35b1d (regreso-al-futuro, otra-mas) añadir archivoD y otras movidas
* 71ce0a4 (otra) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
* d37b306 add archivoA
Ahora hago un par de commits
desde la rama de regreso-al-futuro
, quedando así:
* 465e237 (HEAD -> main) adiós archivoA
* 8b35b1d (regreso-al-futuro, otra-mas) añadir archivoD y otras movidas
* 71ce0a4 (otra) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
* d37b306 add archivoA
Hacemos el rebase respecto de main
, con rebase main
. Vemos que ahora aparecen los commits
hechos en esta rama de regreso al futuro después de eliminar el archivo A, que habíamos hecho después de nuestros cambios. Finalmente hacemos commit
en la rama principal, quedando así:
* e1dd86f (HEAD -> main, regreso-al-futuro) actualizar again archivoE
* 76b65a4 update archivoE
* 2d4601f añadir archivoE
* 465e237 adiós archivoA
* 8b35b1d (otra-mas) añadir archivoD y otras movidas
* 71ce0a4 (otra) update again archivoC
* aec7766 update archivoC
* 7ea40fe add archivoC
* eadfa86 add archivoB
* d37b306 add archivoA
Y así demuestro que sé usar git.