El flujo de pull requests


Has estado trabajando en una función en tu propia rama y ya está lista. El proyecto es compartido: otras personas también hacen commits en él, así que no vas a hacer push directo a main y esperar que todo salga bien. Quieres que revisen el cambio, que se discuta si hace falta, y que se fusione de una manera que el resto del equipo pueda ver. Todo ese camino, desde una rama en tu máquina hasta que el código llega a main, es el flujo de pull requests, y así es como casi todos los equipos en GitHub integran sus cambios. La parte de Git solo usa comandos de capítulos anteriores: una rama, un commit y un push:
$ git switch -c add-five-day-forecast
Switched to a new branch 'add-five-day-forecast'
$ git add src/forecast.js
$ git commit -m "Add five-day forecast panel"
$ git push -u origin add-five-day-forecast
Branch 'add-five-day-forecast' set up to track 'origin/add-five-day-forecast'.Ese push envía tu rama a GitHub. Todavía no se ha fusionado nada, y ni siquiera se ha propuesto nada para revisión. El siguiente paso, abrir el pull request, ocurre en el sitio web de GitHub.
Qué pasa cuando abres un pull request
En GitHub, después de un push como el anterior, normalmente vas a ver un banner que te ofrece comparar tu nueva rama contra main. Haz clic ahí, escribe un título y una breve descripción de qué cambió y por qué, y abre la página que se crea. Esa página es un pull request, muchas veces abreviado como PR: una solicitud para fusionar una rama en otra, con una conversación asociada.
Un pull request propone una fusión y espera aprobación. Alguien, quizás tú, quizás un compañero de equipo, lee el cambio, deja comentarios, y solo lo fusiona una vez que se ve bien. Hasta que eso pase, tu rama y main se quedan exactamente como estaban antes de que abrieras la página.
Fork vs. rama
Abrir un pull request desde una rama funciona cuando tienes acceso de escritura al repositorio, que es el caso normal en los proyectos de tu propio equipo. Contribuir a un proyecto al que no tienes acceso de escritura requiere un paso extra: un fork, tu propia copia del repositorio bajo tu propia cuenta de GitHub.
Creas ramas y haces commits dentro de tu fork exactamente como lo harías en un proyecto propio, haces push a tu fork, y luego abres el pull request desde la rama de tu fork hacia el repositorio original. GitHub compara entre los dos repositorios de la misma manera en que compara dos ramas dentro de un solo repositorio, así que el flujo de revisión y fusión se ve igual en ambos casos.
Lograr que tu pull request pase la revisión
Una vez que un PR está abierto, se convierte en una conversación continua sobre el diff. Un revisor lee el cambio, deja comentarios en líneas específicas, y lo aprueba o solicita cambios. Cuando se solicitan cambios, sigue haciendo commits y push a la misma rama: cada push actualiza el mismo PR en vez de crear uno nuevo. Una vez que un revisor aprueba y pasan las verificaciones requeridas, el PR está listo para fusionarse.
Por qué un pull request no se fusiona
A veces el botón de merge de un PR aparece deshabilitado, y GitHub muestra un mensaje en su lugar: "This branch has conflicts that must be resolved" o "This branch is out of date with the base branch". Ambos mensajes describen un estado normal y solucionable: main avanzó desde que creaste tu rama, normalmente porque el PR de otra persona se fusionó en el intervalo, y tu rama necesita ponerse al día antes de que GitHub pueda combinar las dos de forma limpia. Esto pasa en cualquier proyecto con más de un colaborador, así que hay que esperarlo en lugar de tenerle miedo.
Arréglalo localmente de la misma manera en que juntarías cualquier par de ramas:
$ git switch add-five-day-forecast
$ git fetch origin
From github.com:mara-chen/weather-app
9f8e7d6..b7c9e21 main -> origin/main
$ git merge origin/mainSi no hay nada que se superponga, la fusión se completa sola y haces push, y el PR se actualiza y el botón se habilita. Si las mismas líneas cambiaron en ambos lados, Git marca el conflicto en el archivo para que lo resuelvas exactamente como se cubre en Fusiones y conflictos: abre el archivo, edita los marcadores de conflicto hasta llegar al resultado que quieres, luego usa git add y git commit para terminar la fusión, y vuelve a hacer push.
Un pull request atascado necesita ponerse al día o que se resuelva su conflicto.
main o tiene un conflicto con ella. Nada está roto. Cambia a tu rama, haz fetch, y fusiona main en ella, resolviendo cualquier conflicto de la misma manera en que lo harías en cualquier otro caso, luego vuelve a hacer push. Qué es un pull request en realidad
Un pull request no es un objeto de Git, y no existe ningún comando de git que cree uno. Git y GitHub no son lo mismo: Git solo conoce commits, ramas y otras refs (una ref es un nombre que apunta a un commit). GitHub construye toda la página del PR, los comentarios y el botón de merge sobre dos refs que compara: tu rama (la head) y la rama a la que te estás fusionando (la base, normalmente main). Esa comparación es la razón por la que abres un pull request en el sitio web de GitHub (o mediante la propia herramienta de línea de comandos o API de GitHub), y nunca con un simple comando de git.

