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ícateUn 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:
- Título descriptivo
- Descripción clara del propósito y cambios realizados
- Referencias a issues relacionados
- Posiblemente capturas o GIFs demostrando el funcionamiento
- 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:
- Navega al repositorio en GitHub
- Normalmente aparecerá un banner sugiriendo crear un PR con tu rama recién subida
- Alternativamente, haz clic en "Pull requests" y luego en el botón verde "New pull request"
- Selecciona la rama base (destino, generalmente
main
) y la rama de comparación (tu rama de características) - 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:
- 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.
- 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.
- 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:
- Ver los detalles completos del PR
- Examinar la descripción y comentarios existentes
- Ver todos los archivos modificados
- 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:
- Haz clic en "Add Review" en la parte superior del PR
- Selecciona tu decisión (Comment, Approve o Request Changes)
- Escribe un resumen de tu revisión
- 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:
- Realiza tus cambios y crea commits en una rama
- Abre la vista de Control de código fuente
- Haz clic en "..." y selecciona "Push" para subir tu rama
- Selecciona "Create Pull Request"
- 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.
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.
Comandos básicos
GitHub como remoto
Comandos básicos
Comandos avanzados
Git con GitHub Desktop
Ramas
Instalación y configuración
Introducción a Git
Comandos avanzados
Resolución de conflictos
Git con Intellij IDEA
Git con Visual Studio Code
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.
Introducción A Git
Introducción Y Entorno
Instalación Y Configuración
Introducción Y Entorno
Primeros Pasos Con Git
Introducción Y Entorno
Ciclo De Vida De Los Archivos
Comandos
Comandos Básicos
Comandos
Comandos Avanzados
Comandos
Gitignore Y Archivos Temporales
Comandos
Visualización Y Navegación De Cambios
Comandos
Etiquetas Tags Y Releases
Comandos
Ramas
Ramas
Merge Vs Rebase
Ramas
Stash De Cambios Entre Ramas
Ramas
Cherry Pick De Cambios
Ramas
Deshacer Cambios
Ramas
Gitflow
Ramas
Resolución De Conflictos
Trabajo Remoto Y Colaboración
Github Como Remoto
Trabajo Remoto Y Colaboración
Git Con Visual Studio Code
Trabajo Remoto Y Colaboración
Git Con Intellij Idea
Trabajo Remoto Y Colaboración
Git Con Github Desktop
Trabajo Remoto Y Colaboración
Crear Y Organizar Issues En Github
Trabajo Remoto Y Colaboración
Github Pages Para Crear Sitios Web
Trabajo Remoto Y Colaboración
Repositorio Especial Username Github
Trabajo Remoto Y Colaboración
Pull Requests (Pr) En Github
Integración Continua Ci
Ci Con Github Actions
Integración Continua Ci
Análisis Estático Con Sonarcloud
Integración Continua Ci
Desplegar En Vercel Desde Github
Integración Continua Ci
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