Ramas e historial

7 min

Tabla de contenidos


1 — ¿Por qué ramas?

Una rama es una línea de desarrollo independiente. Te permite trabajar en una funcionalidad nueva sin tocar la versión principal (main), que permanece estable.

Analogía: un documento compartido. En vez de editar directamente la versión oficial (riesgo de romperlo todo), trabajas en una copia de trabajo (la rama). Cuando estás satisfecho, fusionas tus cambios en el original.

Por qué es esencial:

  • Aislamiento: un trabajo experimental nunca rompe la versión estable.
  • Colaboración: cada uno trabaja en su rama, sin molestarse.
  • Organización: una rama = una funcionalidad o una corrección.
Rama típicaRol
mainVersión estable, lista para entregar
feature/...Nueva funcionalidad en curso
fix/...Corrección de bug

↑ Volver arriba


2 — Crear y cambiar de rama
bash
# Listar las ramas (la actual está marcada con un *)
git branch

# Crear una rama
git branch feature-connexion

# Cambiar de rama
git switch feature-connexion

# Crear Y cambiar en un solo comando (recomendado)
git switch -c feature-connexion
Comando modernoEquivalente antiguoEfecto
git switch nomgit checkout nomCambiar a una rama
git switch -c nomgit checkout -b nomCrear y cambiar
git branchListar las ramas
git branch -d nomBorrar una rama fusionada

git switch es el comando moderno dedicado a las ramas. git checkout sigue funcionando pero hace demasiadas cosas a la vez — prefiere switch para las ramas.

🔧 Mini-ejercicio — Escribe el comando que crea la rama feature-login y cambia a ella en una sola operación.

✅ Ver una solución
bash
git switch -c feature-login

↑ Volver arriba


3 — Fusionar una rama

Fusionar (merge) es integrar los cambios de una rama en otra — típicamente, traer tu funcionalidad terminada a main.

bash
# 1. Situarse en la rama que va a RECIBIR los cambios
git switch main

# 2. Fusionar la rama de funcionalidad dentro
git merge feature-connexion
Tipo de fusión¿Cuándo?Resultado
Fast-forwardmain no se ha movido desde la ramamain avanza simplemente
Merge commitmain también ha evolucionadoUn commit de fusión reúne las dos historias
bash
# Tras una fusión exitosa, se puede borrar la rama
git branch -d feature-connexion

Regla simple: te sitúas en la rama de destino (main), luego fusionas la rama origen dentro. «Estoy en main, aspiro feature».

🔧 Mini-ejercicio — Estás en feature-login y el trabajo está terminado. Escribe los dos comandos para fusionar esta rama en main.

✅ Ver una solución
bash
git switch main
git merge feature-login

↑ Volver arriba


4 — Gestionar un conflicto de fusión

Un conflicto aparece cuando dos ramas han modificado la misma línea de un mismo archivo. Git no puede elegir por ti: te pide que decidas.

Git inserta marcadores en el archivo en conflicto:

<<<<<<< HEAD
texto de la rama actual (main)
=======
texto de la rama fusionada (feature)
>>>>>>> feature-connexion

Para resolver:

  1. Abrir el archivo, elegir el contenido correcto (o combinar los dos).
  2. Borrar los marcadores <<<<<<<, =======, >>>>>>>.
  3. git add archivo y luego git commit para finalizar la fusión.

Un conflicto no es un error grave: es Git protegiéndote al negarse a adivinar. Mantén la calma, lee las dos versiones, quédate con la buena.

🔧 Mini-ejercicio — Cita los tres marcadores que Git inserta en un archivo en conflicto y que hay que borrar tras la resolución.

✅ Ver una solución

<<<<<<< , ======= y >>>>>>>. Una vez elegido el contenido correcto, se borran, luego se hace git add y git commit.

↑ Volver arriba


5 — Consultar el historial
bash
# Historial completo
git log

# Versión compacta (una línea por commit)
git log --oneline

# Con el grafo de las ramas y fusiones
git log --oneline --graph --all

# Ver las modificaciones de un commit
git show <hash>

# Ver quién modificó cada línea de un archivo
git blame fichier.txt
ComandoResponde a la pregunta
git log¿Cuál es la historia del proyecto?
git log --oneline --graph --all¿Cómo se ramificaron las ramas?
git show <hash>¿Qué cambió exactamente este commit?
git blame fichier¿Quién escribió esta línea, y cuándo?

El historial Git es una máquina del tiempo. Bien usado (con buenos mensajes de commit), permite entender por qué el código está en su estado actual.

🔧 Mini-ejercicio — Escribe el comando que muestra el historial de forma compacta, con el grafo de las ramas y todas las ramas.

✅ Ver una solución
bash
git log --oneline --graph --all

↑ Volver arriba


6 — Quiz — Ramas e historial

Question 1: ¿Para qué sirve una rama?

a) Para borrar el historial

b) Para desarrollar de forma aislada sin tocar la versión principal

c) Para conectarse a GitHub

d) Para compilar el código

💡 Ver la solución

Respuesta: b) — Una rama es una línea de desarrollo independiente: aísla el trabajo en curso de la rama estable main.


Question 2: ¿Qué comando crea una rama Y cambia a ella?

a) git branch nom

b) git switch -c nom

c) git merge nom

d) git log nom

💡 Ver la solución

Respuesta: b)git switch -c nom crea la rama y se sitúa en ella en un solo comando (equivalente moderno de git checkout -b).


Question 3: Para fusionar feature en main, primero debo…

a) Situarme en feature y luego hacer git merge main

b) Situarme en main y luego hacer git merge feature

c) Borrar main

d) Hacer git init

💡 Ver la solución

Respuesta: b) — Te sitúas en la rama de destino (main), luego fusionas la rama origen (feature) dentro.


Question 4: ¿Cuándo aparece un conflicto de fusión?

a) Cuando dos ramas modifican la misma línea del mismo archivo

b) En cada fusión, sistemáticamente

c) Cuando se crea una rama

d) Cuando se instala Git

💡 Ver la solución

Respuesta: a) — Git no puede elegir entre dos modificaciones de la misma línea: señala un conflicto a resolver a mano.


Question 5: ¿Qué comando muestra el historial con el grafo de las ramas?

a) git status

b) git log --oneline --graph --all

c) git branch -d

d) git add .

💡 Ver la solución

Respuesta: b)--graph --all dibuja la estructura de las ramas y las fusiones; --oneline la hace compacta.

↑ Volver arriba


7 — Práctica — Una funcionalidad en su rama

Consigna

En un repositorio existente, crea una rama, haz un commit en ella, luego fusiónala en main y consulta el grafo.


Corrección — Secuencia de comandos esperada

bash
# 1. Partir de main al día
git switch main

# 2. Crear y cambiar a una rama de funcionalidad
git switch -c feature-titre

# 3. Trabajar y commitear en la rama
echo "## Nueva sección" >> README.md
git add README.md
git commit -m "Añade una nueva sección al README"

# 4. Volver a main y fusionar
git switch main
git merge feature-titre

# 5. Limpiar la rama fusionada
git branch -d feature-titre

# 6. Visualizar el historial
git log --oneline --graph --all

Resultado esperado: el commit de la rama aparece en el historial de main, y git branch ya no lista feature-titre.

Este ciclo — crear una rama, trabajar, fusionar, borrar — es el flujo de trabajo diario de un desarrollador. Lo repetirás cientos de veces.

↑ Volver arriba


8 — Síntesis

Puntos a recordar

  1. Una rama = una línea de desarrollo aislada; main permanece estable.
  2. git switch -c nom crea y cambia a una rama.
  3. Fusionar: situarse en el destino (main), luego git merge origen.
  4. Un conflicto aparece en las mismas líneas modificadas en los dos lados; se resuelve a mano.
  5. git log --oneline --graph --all visualiza la historia y las ramas.

A continuación

Lección 08 — Repositorio remoto: compartir tu trabajo en línea y colaborar vía un servidor Git (GitHub).

↑ Volver arriba


Todos los derechos reservados. Toda reproducción, difusión, uso o adaptación de este curso, en todo o en parte, está estrictamente prohibida sin la autorización escrita previa del Dr. Haythem REHOUMA.

Curso creado por Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos