Apuntes sobre Git

Commit temprano, commit a menudo, y reza fuerte.

Ramas temporales

Suponiendo que el proyecto está actualizado (esto es, con todos los cambios recientes incorporados mediante add, commit y push en su caso), puedes crear una rama temporal si vas a introducir cambios y no estás seguro del resultado:

git checkout -b nombre-de-la-rama   # sintaxis clásica
git switch -c nombre-de-la-rama     # sintaxis moderna (equivalente)

Con eso creas una rama separada donde puedes realizar los cambios necesarios. Si algo sale mal y quieres deshacerlos:

git checkout main

Eso nos devuelve a la rama principal (el tronco).

NOTA: cualquier cambio que hagas en tu código después de crear la rama, pero sin hacer commit, no está aún en la rama. Por lo tanto, si vuelves a main, los cambios seguirán ahí, pendientes. Si quieres volver a main y prescindir de todo lo que cambiaste tras crear la rama, primero haz:

git checkout main

Y luego:

git reset --hard HEAD

Esto restaurará los archivos al último commit en main.

NOTA 2: para deshacer cualquier cambio realizado en la rama temporal que ya hayas confirmado con commit, puedes descartarlo borrando la rama:

git branch -D nombre-de-la-rama

Importante: si haces checkout main después de hacer un commit en nombre-de-la-rama, la rama de prueba sigue existiendo con sus cambios, pero main no los tiene.

Finalmente, si has terminado con el trabajo en la rama y el resultado es satisfactorio, puedes volver a main e integrar los cambios:


git checkout main
git merge nombre-de-la-rama

Si ya no necesitas nombre-de-la-rama, puedes borrarla:

git branch -d nombre-de-la-rama

Si Git te dice que la rama no se puede borrar porque no está completamente fusionada, usa:

git branch -D nombre-de-la-rama

Durante el desarrollo de la rama, para subir el código al repositorio remoto:

git push origin nombre-de-la-rama

Rescatar un commit concreto con cherry-pick

A veces en una rama de experimento haces un fix puntual que también necesitas en main, pero el resto del experimento no está listo para fusionar. En ese caso puedes "coger" solo ese commit:

# Asegúrate de estar en la rama destino
git switch main

# Aplica solo el commit que te interesa (usa su hash)
git cherry-pick <hash_del_commit>

Git copia ese commit con sus cambios y crea uno nuevo en main. El historial de la rama de experimento no se modifica.

Resolver conflictos de fusión

Cuando dos ramas han modificado las mismas líneas de un archivo, Git no puede fusionarlas automáticamente y marca el conflicto en el archivo afectado:

<<<<<<< HEAD
código de tu rama actual
=======
código de la rama que estás fusionando
>>>>>>> nombre-de-la-rama

El proceso para resolverlo:

  1. Abre el archivo y elige qué versión conservar (o combina ambas). Elimina las marcas <<<, === y >>>.
  2. Marca el archivo como resuelto: git add archivo-resuelto.txt
  3. Completa el merge: git commit

Nota: Los conflictos son una parte normal del trabajo con ramas, no un error. La mayoría de editores modernos (VS Code, etc.) incluyen herramientas visuales para resolverlos con comodidad.

En la próxima lección: cómo organizar muchos cambios pendientes en commits lógicos.

TOP