Error git

Mario González - Blog sobre desarrollo web

Soluciones a los problemas más comunes con Git: he creado commits en la rama incorrecta

| ,

Este post forma parte de una serie orientada a proporcionar soluciones a los atascos más habituales que nos encontramos con Git:

  1. He creado commits en la rama incorrecta
  2. Cómo recuperar commits perdidos

Muchos de los problemas que nos vamos a encontrar tienen que ver con el manejo de ramas, y para solucionarlos es importante que entendamos cómo funcionan las ramas en Git.

Solemos asociar el concepto rama a un itinerario de commits. Sin embargo, para Git una rama no es más que un identificador que apunta a un commit. Cuando vemos un log como el siguiente, pensamos que la rama master es el conjunto de los cuatro commits:

Rama master

Sin embargo, master no es más que un apuntador al commit C4, y no tiene información sobre los commits anteriores. Git es capaz de dibujar el itinerario porque cada commit tiene guardado quién es su commit anterior.

Teniendo en cuenta que una rama no es más que un identificador que apunta a un commit, podemos mover ramas tranquilamente sin que eso afecte a la forma que tiene nuestro log, porque lo único que estaremos cambiando es a qué commit apunta cada rama.

Para mover una rama tenemos dos comandos:


git reset --hard <commit>   # Mueve la rama en la que estoy

git branch -f <rama> <commit>   # Mueve una rama diferente a en la que estoy

Crear commits en la rama incorrecta

En muchas ocasiones nos damos cuenta de que hemos estado trabajando y creando varios commits en la rama que no toca. Esto puede pasar porque nos hemos olvidado de saltar a la rama correspondiente o porque se nos ha olvidado crearla.

Vamos a ver un ejemplo en el que creamos una rama de tipo feature, pero en vez de crear commits en ella, lo hacemos en la rama develop.

Imaginemos que hemos creado la rama feature a partir del último commit de la rama develop. En ese momento tenemos un árbol así:

Rama feature recién creada
Rama feature recién creada

Si nos olvidamos de saltar a la rama feature y vamos creando commits, acabaremos con un árbol así:

Rama develop incorrecta
Hemos hecho avanzar la rama incorrecta

Para solucionar este tipo de problemas siempre es útil imaginarse (o incluso dibujar en un papel) cómo debería haber quedado el árbol. En nuestro caso, lo que queríamos era acabar con un árbol así:

Rama feature correcta
Deberíamos haber hecho avanzar feature en vez de develop

Pues bien, si comparamos ambos árboles (el que queríamos haber conseguido y el que hemos conseguido realmente) veremos que la solución es tan simple como mover las ramas a sus commits correspondientes.

Si estamos en la rama develop, para mover la rama feature usaremos el siguiente comando:


git branch -f feature C6

Y para mover la rama develop usaremos el siguiente comando:


git reset --hard C4

Con esto habremos intercambiado las ramas y habremos conseguido el árbol que queríamos.

Si lo que nos ha pasado es que se nos ha olvidado crear la rama feature y hemos ido creando commits en develop, lo único que tenemos que hacer es crear la rama feature a partir del último commit, y luego devolver develop al commit en el que debería estar (C4 en nuestro ejemplo).

Ya veis que si el único problema que tenemos es que nuestras ramas no están donde tenían que estar, la solución es bien fácil: moverlas al sitio correcto.

¿Qué opinas?

Tu dirección de correo electrónico no será publicada. * Campos obligatorios