DIFERENCIA ENTRE GIT REBASE Y GIT MERGE , WORKSHOP DE GIT .

Miguel Casas Perea ツ
5 min readNov 24, 2014

--

En este apartado la idea es demostrar comandos y el uso habitual de la herramienta git en nuestros proyectos, ya sean colaborativos o personales.

Comencemos.

1 . vamos a clonar el repositorio remoto del proyecto. $ git clone https://github.com/user/workshop.git

nota: cuando clonamos el proyecto se recomienda crear una rama nueva para hacer todos nuestros cambios .

2. Partiendo de la nota anterior vamos a crear la rama donde vamos hacer los cambios.

$ git branch mi-rama

3. Después de crear la rama donde vamos a realizar nuestros cambios nos cambiamos a ella .

$ git checkout mi-rama

— En el workshop vamos a tener nuestro primer commint en la rama master así que vamos a realizar cambios en nuestra ramas .

4. Luego de realizar cambios vamos a revisar el estado de nuestro repositorio y hacerle seguimiento a los cambios o agregarlo al stage .

$ git status $ git add .

5. Le hacemos commit a los cambios con un mensaje que describa lo que hemos cambiado (en nuestro ejercicio vamos a poner algo descriptivo para la explicación)

$ git commit -m “mi segundo commit”

6. Huiss en esta parte no he seguido la nota anterior y voy a la rama master , modifico un archivo y creo un tercer commit

$ git checkout master $ git commit -am “mi tercer commit”

Bueno después de romper las reglas y crear el tercer commit , nosotros seguiremos trabajando en nuestra rama y crearemos el cuarto commit

$ git checkout mi-rama
$ git commit -am “mi cuarto commit”

  • a este nivel deberíamos de tener algo como esta imagen.

Ahora resulta que queremos tener los cambios del master en nuestra rama .

Git es una gran herramienta que es capaz de detectar cuando existe una modificación en los archivos y ademas marcar cuando podemos tener un conflicto a la hora de unir dos ramas.

Para realizar esto podemos usar uno de los dos siguientes comandos :

$ git rebase ó el $ git merge.

Hemos pedido realizar los anteriores commit para usar estos dos comando y poder mirar la diferencias y así decidir cuando podemos usar uno de los dos .

  • Vamos a usar primero el comando MERGE y vamos a mirar su compartamiento.

Pasaremos los cambios del master a nuestra rama .

Estando en nuestra rama escribimos lo siguiente.

$ git merge master

al hacerle merge , git va a gritar y nos mostrara un mensaje de conflicto como este .

Automezclado index.html CONFLICTO(contenido): conflicto de fusión en index.html Automatic merge failed; fix conflicts and then commit the result.

Después de recibir el grito de git vamos al archivo y lo corregimos como lo necesitamos.

Ya que hemos puesto el archivo a nuestro gusto vamos a mirar el estado de nuestro repositorio local y nos daremos cuenta que debemos de agregar los cambios que acabamos realizar .

$ git status

$ git add .

Como le hicimos merge , debemos realizar un commit donde vamos a ponerle una descripción de la union de los commit de la rama master con nuestra rama , que nos quedaria de esta manera .

$ git commit -m “uniendo commit 1,2 y 4 con el 3"

con esto ya tenemos los cambios del master usando merge .

  • ahora la oportunidad es para mirar el comportamiento del comando REBASE

$ git rebase master

Al hacerle rebase git va a gritar , nos mostrara un mensaje de conflicto y nos dirá que hacer

When you have resolved this problem, run “git rebase —continue”. If you prefer to skip this patch, run “git rebase —skip” instead. To check out the original branch and stop rebasing, run “git rebase –abort”.

Luego de poner el archivo a nuestro gusto vamos a la consola y agregamos al stage nuestros cambios .

$ git add .

Con el rebase después de agregar vamos a seguir sus instrucciones y no hacemos commit .

$ git rebase —continue

y listo ya tendremos los cambios de la rama master a nuestra rama usando el comando rebase .

Y quedaría de esta manera .

DIFERENCIAS DE REBASE Y MERGE

Después de realizar el workshop vamos a poder ver muy fácilmente las diferencias de estos dos comandos de git que podemos usar a la hora de querer unificar cambios entre ramas.

A simple vista podemos notar varias diferencias

comenzaremos con unas de las más notables .

  • El rebase unifica las ramas dejando un arbol lineal o más bonito.El merge aun deja el gráfico de las ramas.
  • otras de las diferencias, el merge a la hora de querer unificar nos toca realizar un commit de más , en nuestro caso el de la descripción (uniendo commit 1,2 y 4 con el 3 ) , este es el commit que muchos dicen commit basura ó innecesario . El rebase unifica sin necesidad de crear un nuevo commit .
  • Hay una diferencia bien importante que debemos tener en cuenta a la hora de mirar cual de los dos tomar . El rebase unifica las ramas perdiendo el historial de los commit y el merge no . Esto puede resultar bien importante cuando se necesite llevar o saber el historial de commit y se esta trabajando con otros compañeros en esa rama. Puedes llegar ser odiado por el equipo al usar rebase XD.

Ademas del comando rebase dejar perder el historial, monta los commit encima de la otra rama sin importar de la cronología. Eso lo puedes observar en las imágenes de arriba.

Estas son unas de las diferencias , es por eso que cuando se esta trabajando en equipo donde los commit resultan muy importantes se recomienda usar siempre merge .

Bueno compañero me despido y si hay algún detalle que corregir o agregarle al post , no duden en comentarme .

Saludos y espero que les sea este post de mucha utilidad .

--

--