Git

Git

Tutorial Git: Pull Requests (PR) en GitHub

Aprende a crear y fusionar Pull Request en GitHub para Code Review y fusión de cambios de código en repositorios git desde Visual Studio Code y GitHub.

Aprende Git y certifícate

Un Pull Request (PR) es un mecanismo fundamental en el desarrollo colaborativo de software que permite a los desarrolladores proponer cambios al código base de un proyecto. En esencia, es una solicitud para que el mantenedor de un repositorio revise, discuta y potencialmente integre los cambios que has realizado en una rama separada del proyecto.

El flujo básico comienza cuando un desarrollador crea una rama independiente del código principal, realiza modificaciones en esa rama y luego solicita que esos cambios sean "extraídos" (pulled) e incorporados a la rama principal. Esta metodología es central en plataformas como GitHub, GitLab y Bitbucket.

Los Pull Requests ofrecen numerosas ventajas:

  • Control de calidad: Permiten revisión de código antes de fusionar cambios
  • Colaboración estructurada: Proporcionan un espacio dedicado para discutir implementaciones
  • Documentación automática: Registran el motivo de los cambios y decisiones tomadas
  • Trazabilidad: Vinculan código con tareas, requerimientos o errores reportados
  • Integración con CI/CD: Facilitan pruebas automatizadas antes de aceptar cambios

Debes utilizar Pull Requests cuando:

  • Trabajas en equipos donde se requiere revisión de código
  • Contribuyes a proyectos de código abierto
  • Implementas nuevas funcionalidades
  • Corriges errores
  • Realizas refactorizaciones importantes
  • Necesitas discutir enfoques técnicos con el equipo

Un PR bien estructurado incluye:

  1. Título descriptivo
  2. Descripción clara del propósito y cambios realizados
  3. Referencias a issues relacionados
  4. Posiblemente capturas o GIFs demostrando el funcionamiento
  5. Lista de verificación para revisores

El uso de Pull Requests forma parte de flujos de trabajo como GitFlow o GitHub Flow, que establecen convenciones para gestionar cambios de manera ordenada, manteniendo la estabilidad del código principal mientras se desarrollan nuevas características en paralelo.

Creación de un PR: Desde ramas feature hacia rama principal

Para crear un Pull Request efectivo, primero debes trabajar en una rama de características (feature branch) separada. Este enfoque te permite desarrollar y probar tu código de forma aislada antes de proponer su integración.

El proceso comienza en tu entorno local de desarrollo:

# Asegúrate de tener la última versión de la rama principal
git checkout main
git pull origin main

# Crea una nueva rama para tu característica
git checkout -b feature/nueva-funcionalidad

# Realiza cambios, crea commits
git add .
git commit -m "Implementa nueva funcionalidad"

# Sube tu rama al repositorio remoto
git push -u origin feature/nueva-funcionalidad

Una convención común es nombrar las ramas con prefijos descriptivos como feature/, bugfix/, hotfix/ o docs/ seguidos de un nombre conciso que indique el propósito.

Una vez que tu rama está en el repositorio remoto, puedes crear el PR desde la interfaz web de GitHub:

  1. Navega al repositorio en GitHub
  2. Normalmente aparecerá un banner sugiriendo crear un PR con tu rama recién subida
  3. Alternativamente, haz clic en "Pull requests" y luego en el botón verde "New pull request"
  4. Selecciona la rama base (destino, generalmente main) y la rama de comparación (tu rama de características)
  5. Haz clic en "Create pull request"

La descripción del PR es crucial para facilitar la revisión. Una descripción efectiva incluye:

  • Contexto claro sobre el propósito del cambio
  • Lista de modificaciones principales realizadas
  • Referencias a issues relacionados (usando #número)
  • Instrucciones para probar los cambios
  • Capturas de pantalla si hay cambios visuales

GitHub ofrece la posibilidad de usar plantillas para PRs, que puedes configurar en tu repositorio creando archivos .md en la carpeta .github/PULL_REQUEST_TEMPLATE/.

Si tus cambios están incompletos o no listos para revisión, puedes crear un Draft Pull Request seleccionando esta opción en el menú desplegable al crear el PR. Esto indica al equipo que el trabajo está en progreso pero abierto a comentarios tempranos.

Los PRs vinculados a issues pueden cerrar automáticamente esos issues cuando se fusionan, usando palabras clave como "Closes #123" o "Fixes #456" en la descripción. Esta característica mejora la trazabilidad entre problemas reportados y sus soluciones.

Revisión y discusión: Comentarios, sugerencias de código y aprobaciones

La fase de revisión es donde el verdadero valor colaborativo de los Pull Requests se manifiesta. Una vez creado el PR, comienza un proceso de revisión por parte de otros miembros del equipo que examinarán tus cambios.

GitHub proporciona varias herramientas para facilitar revisiones detalladas:

  • Vista de cambios que muestra claramente qué líneas se han agregado, modificado o eliminado
  • Opción de vista unificada o dividida para comparar el código
  • Filtros para ver solo archivos específicos o tipos de cambios

Como revisor, puedes agregar tres tipos principales de feedback:

  1. Comentarios generales en el PR completo, útiles para observaciones amplias:
La implementación se ve bien en general, pero considero que podríamos mejorar la gestión de errores.
  1. Comentarios en línea específicos para una parte del código:
Esta función podría ser más eficiente si utilizaras Map en lugar de filtrar el array dos veces.
  1. Sugerencias de código que el autor puede aplicar directamente:
function procesarDatos(datos) {
    return datos.filter(item => item.activo);
}

Para hacer una sugerencia, selecciona el código que quieres modificar, haz clic en el botón "+" que aparece y edita el código en el cuadro que se abre.

Los revisores pueden terminar su revisión de tres formas:

  • Comment: Proporcionando feedback sin aprobar ni rechazar explícitamente
  • Approve: Indicando que los cambios son aceptables y están listos para fusionarse
  • Request changes: Solicitando modificaciones específicas antes de aprobar

La resolución de comentarios forma parte integral del proceso. Cuando el autor del PR implementa los cambios solicitados, puede marcar los comentarios como resueltos, facilitando el seguimiento de lo que ya ha sido abordado.

GitHub permite configurar reglas de protección para las ramas principales, como requerir un número mínimo de aprobaciones antes de permitir la fusión. Esto garantiza que todo el código haya sido revisado adecuadamente.

Para revisiones efectivas, es recomendable:

  • Ser específico y constructivo en los comentarios
  • Enfocarse en el código, no en la persona
  • Priorizar los problemas críticos sobre preferencias personales
  • Explicar el "por qué" detrás de las sugerencias, no solo el "qué"
  • Responder rápidamente a las revisiones para mantener el impulso

Las revisiones iterativas son comunes: tras implementar cambios solicitados, el autor actualiza el PR y los revisores pueden volver a examinar solo lo que ha cambiado desde su última revisión, gracias a la capacidad de GitHub de mostrar solamente los cambios recientes.

Fusionar el PR: Opciones de merge, squash o rebase en GitHub

Una vez que un Pull Request ha sido revisado y aprobado, llega el momento de fusionar los cambios con la rama principal. GitHub ofrece tres estrategias de fusión diferentes, cada una con sus propias características y efectos en el historial de commits.

Merge (Fusión estándar)

La opción "Create a merge commit" realiza una fusión tradicional:

git checkout main
git merge --no-ff feature/nueva-funcionalidad

Este método:

  • Crea un nuevo commit de fusión que conecta ambas ramas
  • Preserva todo el historial de la rama de características
  • Mantiene visibles todos los commits individuales en la rama principal
  • Muestra claramente el desarrollo paralelo en el gráfico de commits

El historial resultante muestra exactamente cuándo se inició el desarrollo de la característica y cuándo se reincorporó al flujo principal, facilitando la comprensión del contexto histórico.

Squash and merge

La opción "Squash and merge" combina todos los commits de la rama en uno solo:

git checkout main
git merge --squash feature/nueva-funcionalidad
git commit -m "Implementa nueva funcionalidad (#123)"

Este enfoque:

  • Condensa toda la historia de desarrollo en un único commit en la rama principal
  • Crea un historial lineal más limpio
  • Reduce el "ruido" de commits intermedios como "arregla errores de sintaxis" o "WIP"
  • Permite un mensaje de commit consolidado que resume todos los cambios

Es ideal cuando la rama contiene múltiples commits pequeños o de trabajo en progreso que no aportan valor individual al historial principal.

Rebase and merge

La opción "Rebase and merge" reaplica cada commit de la rama sobre la punta de la rama principal:

git checkout feature/nueva-funcionalidad
git rebase main
git checkout main
git merge --ff feature/nueva-funcionalidad

Este método:

  • Crea un historial lineal sin commits de fusión
  • Mantiene los commits individuales pero los reescribe sobre la rama principal
  • Hace que los cambios aparezcan como si se hubieran desarrollado en serie, no en paralelo
  • Preserva la autoría y mensajes de cada commit

Es adecuado cuando los commits individuales están bien organizados y proporcionan valor por separado, pero se desea un historial sin bifurcaciones.

Consideraciones para elegir el método

Al decidir qué estrategia utilizar, considera:

  • La política del proyecto: Muchos proyectos establecen directrices específicas
  • El tipo de cambio: PRs grandes suelen beneficiarse del squash, mientras que cambios modulares pueden preservarse con merge o rebase
  • La calidad de los commits: Commits bien estructurados merecen preservarse individualmente
  • Las necesidades de depuración: Si usas herramientas como git bisect, un historial granular ayuda

Los administradores del repositorio pueden configurar qué opciones de fusión están disponibles en "Settings > Options > Merge button", permitiendo:

  • Activar/desactivar cada método
  • Establecer un método predeterminado
  • Requerir verificaciones antes de permitir la fusión

Después de la fusión, GitHub ofrece la opción de eliminar automáticamente la rama de características, lo que ayuda a mantener limpio el repositorio. Esta eliminación es segura, ya que siempre puedes restaurar la rama si es necesario.

Para resolver conflictos cuando Git no puede fusionar automáticamente, GitHub proporciona opciones para:

  • Resolver directamente en la interfaz web (para conflictos simples)
  • Resolver localmente usando tu editor y herramientas Git (para casos complejos)

Gestionar Pull Request desde Visual Studio Code

Visual Studio Code ofrece una integración robusta con Git y GitHub que permite gestionar Pull Requests directamente desde el editor, eliminando la necesidad de cambiar constantemente entre el editor y el navegador.

Para comenzar, necesitas instalar la extensión oficial GitHub Pull Requests and Issues. Búscala en el panel de extensiones o instálala directamente con:

ext install GitHub.vscode-pull-request-github

Después de instalar la extensión, sigue las instrucciones para autenticarte con tu cuenta de GitHub. Una vez autenticado, tendrás acceso a tus Pull Requests directamente en VS Code.

La extensión añade una nueva sección en la vista de Control de código fuente (Source Control) desde donde puedes:

  • Ver todos los PRs asignados a ti
  • Explorar PRs creados por ti
  • Examinar PRs donde estás mencionado
  • Buscar cualquier PR abierto en los repositorios a los que tienes acceso

Para revisar un PR específico, selecciónalo de la lista y podrás:

  1. Ver los detalles completos del PR
  2. Examinar la descripción y comentarios existentes
  3. Ver todos los archivos modificados
  4. Hacer checkout del PR localmente para pruebas

Una de las características más poderosas es la capacidad de probar el código del PR localmente. Al hacer checkout, VS Code descarga automáticamente la rama y te permite ejecutar, depurar y verificar los cambios en tu entorno:

# VS Code ejecuta estos comandos automáticamente al hacer checkout
git fetch origin pull/{pr-number}/head:{branch-name}
git checkout {branch-name}

Para añadir comentarios durante la revisión:

  • Haz clic junto al número de línea en un archivo
  • Escribe tu comentario, que puede incluir formateo Markdown
  • Para sugerencias de código, usa la sintaxis de sugerencias de GitHub:
// Tu código sugerido aquí

También puedes crear comentarios multi-línea seleccionando un bloque de código antes de añadir un comentario.

Para responder a comentarios existentes, simplemente escribe debajo del comentario original en el hilo de la conversación.

La extensión también permite aprobar o solicitar cambios directamente:

  1. Haz clic en "Add Review" en la parte superior del PR
  2. Selecciona tu decisión (Comment, Approve o Request Changes)
  3. Escribe un resumen de tu revisión
  4. Envía la revisión

Para resolver conflictos en un PR, VS Code ofrece una interfaz visual intuitiva:

  • Los archivos con conflictos se marcan claramente
  • Al abrir un archivo conflictivo, verás secciones con "Current Change" e "Incoming Change"
  • Puedes elegir aceptar uno u otro, o ambos cambios
  • Una vez resueltos todos los conflictos, confirma los cambios y actualiza el PR

También puedes crear nuevos Pull Requests directamente desde VS Code:

  1. Realiza tus cambios y crea commits en una rama
  2. Abre la vista de Control de código fuente
  3. Haz clic en "..." y selecciona "Push" para subir tu rama
  4. Selecciona "Create Pull Request"
  5. Completa el formulario con título, descripción y revisores

La extensión soporta además plantillas de PR configuradas en el repositorio, mostrándolas automáticamente al crear un nuevo PR.

Para usuarios avanzados, VS Code permite acceder a comandos relacionados con PRs desde la paleta de comandos (Ctrl+Shift+P o Cmd+Shift+P) buscando "GitHub Pull Requests".

Esta integración permite un flujo de trabajo más eficiente al mantener el contexto de desarrollo y revisión en una sola herramienta, ahorrando tiempo y reduciendo la fricción en el proceso de desarrollo colaborativo.

CONSTRUYE TU CARRERA EN IA Y PROGRAMACIÓN SOFTWARE

Accede a +1000 lecciones y cursos con certificado. Mejora tu portfolio con certificados de superación para tu CV.

30 % DE DESCUENTO

Plan mensual

19.00 /mes

13.30 € /mes

Precio normal mensual: 19 €
63 % DE DESCUENTO

Plan anual

10.00 /mes

7.00 € /mes

Ahorras 144 € al año
Precio normal anual: 120 €
Aprende Git online

Ejercicios de esta lección Pull Requests (PR) en GitHub

Evalúa tus conocimientos de esta lección Pull Requests (PR) en GitHub con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Git

Accede a todas las lecciones de Git y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Git y certifícate

Certificados de superación de Git

Supera todos los ejercicios de programación del curso de Git y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Aprender qué es una Pull Request
  • Crear Pull Request
  • Fusionar cambios
  • Code review