Respuestas:
A partir del 15.08.2016, GitHub permite cambiar la rama de destino de una solicitud de extracción a través de la GUI. Haga clic en Edit
junto al título, luego seleccione la rama del menú desplegable.
Ahora puede cambiar la rama base de una solicitud de extracción abierta. Después de haber creado una solicitud de extracción, puede modificar la rama base para que los cambios en la solicitud de extracción se comparen con una rama diferente. Al cambiar la rama base de su solicitud de extracción original en lugar de abrir una nueva con la rama base correcta, podrá mantener un trabajo y una discusión valiosos.
El remitente puede cambiar eso cuando emite la solicitud de extracción, pero una vez que la emite, no puede cambiarla.
Por otro lado, puede fusionar manualmente su rama y empujar, lo que hago con regularidad para las solicitudes de extracción erróneas.
Puede encontrar la hub
gema útil para trabajar con los componentes de la solicitud de extracción.
Esa joya concluye el proceso manual, que es:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
como menciona @GuillermoMansilla en su respuesta.
Una alternativa al uso de la gema central mencionada en otras respuestas es usar la línea de comando para fusionar solicitudes de extracción localmente , lo que le permite hacer:
$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Los comandos anteriores solo funcionan directamente si primero agrega la siguiente línea a su .git/config
archivo:
fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
Lo que hace es permitirle descargar TODAS las solicitudes de extracción. Dado que eso puede no ser deseable para repositorios grandes, GitHub modificó las instrucciones para incluir la git fetch origin pull/ID/head:BRANCHNAME
sintaxis, lo que evita la modificación del archivo de configuración y solo descarga esa única solicitud de extracción.
Aunque no puede cambiar la solicitud de extracción existente ya que no es suya, puede crear fácilmente una nueva si el repositorio de origen relacionado aún existe, sí, incluso si es de otra persona.
Vaya al repositorio del remitente y luego cree una nueva solicitud de extracción en su repositorio utilizando las mismas confirmaciones, pero asegúrese de configurar correctamente la rama de destino correcta.
Luego, regrese a su propio repositorio y acepte la nueva solicitud de extracción. ¡Voila!
No hay nada de malo en la solución de Daniel Pittman, sin embargo, trataría esas fusiones como "sin avance rápido", es decir, cambiando el paso número 3 por:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Al usarlo --no-ff
, el historial será más fácil de leer. Dirá claramente de $n
dónde provienen las confirmaciones $branch
, y también te facilitará la vida si necesitas revertir algo hecho en esa rama.
Para responder también a la pregunta de eoinoc y dar un consejo adicional:
Después de hacer la fusión, su git cli le pedirá que escriba un mensaje, generalmente aparecerá un mensaje genérico diciendo algo como
Fusionar la rama de seguimiento remoto 'usuario / su-rama' en su rama
Asegúrese de editar ese mensaje e incluir una referencia al número de solicitud de extracción. Es decir: (asumiendo que el número de solicitud de extracción es 123)
Fusionar la rama de seguimiento remoto 'usuario / su-rama' en su rama
refs # 123 resolviendo lo que sea ...
Entonces, la próxima vez que visite su página de problemas / solicitudes de extracción de github y verifique esa solicitud de extracción en particular, verá su mensaje con un enlace para confirmar dónde realizó la fusión.
Aquí hay una captura de pantalla de lo que quiero decir.
Para hacer eso, vaya a la página de inicio de su repositorio, haga clic en las ramas y cambie la rama predeterminada de maestra a otra, en mi caso "dev".
Después de eso, cada vez que alguien crea una solicitud de extracción, el merge
botón fusionará automáticamente la solicitud en "dev" en lugar de master.