Fusionar pull request a una rama diferente a la predeterminada, en Github


Una solicitud de extracción entra en mi repositorio alojado en Github. Por defecto se fusiona en la rama master.

¿Hay alguna manera para mí de cambiar en qué rama se fusionarían los cambios?

Author: eoinoc, 2012-02-04

6 answers

A partir del 15.08.2016 GitHub permite cambiar la rama de destino de una solicitud de extracción a través de GUI:

pantallazo

Ahora puede cambiar la rama base de una solicitud de extracción abierta. Después de crear 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 valioso y discusión.

 39
Author: maliayas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-10 12:02:02

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 push, lo que hago semi-regularmente para solicitudes de extracción mal dirigidas.

Usted puede encontrar la hub gem útil para trabajar con los componentes de la solicitud de extracción.

Esa gema concluye el proceso manual, que es:

  1. Agregue un control remoto para la bifurcación a su local Checkout.
  2. Busca ese control remoto.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...
 54
Author: Daniel Pittman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-04 20:17:58

Una alternativa al uso de la gema hub mencionada por otras respuestas es usar la línea de comandos para fusionar localmente las solicitudes de extracción, 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 archivo .git/config:

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 deseado para grandes repositorios, GitHub modificó las instrucciones para incluir la sintaxis git fetch origin pull/ID/head:BRANCHNAME, lo que evita modificación del fichero de configuración y solo descarga esa única pull request.

 13
Author: Grzegorz Adam Hankiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 17:36:25

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 código fuente relacionado aún existe, sí, incluso si es de otra persona.

Vaya al repositorio del remitente y luego cree una nueva pull request en su repositorio usando las mismas confirmaciones, pero asegúrese de establecer la rama de destino correcta correctamente.

Luego regrese a su propio repositorio y acepte la nueva solicitud de extracción. ¡Voila!

 7
Author: Carsten Schmitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-11 20:37:23

No hay nada malo con la solución de Daniel Pittman, sin embargo, trataría esas fusiones como "no fast forward", es decir, cambiando el paso número 3 por:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

Usando --no-ff, el historial será más fácil de leer. Dirá claramente que $n las confirmaciones vinieron de $branch, y también te hará la vida más fácil 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, tu cli de git le pedirá que escriba un mensaje, generalmente un mensaje genérico aparecerá diciendo algo como

Fusionar la rama de seguimiento remoto 'user / their-branch' en su rama

Asegúrese de editar ese mensaje e incluir una referencia al número de solicitud de extracción. Eso es: (Suponiendo que el número de solicitud de extracción es 123)

Fusionar la rama de seguimiento remoto 'user / their-branch' en su rama

Refs #123 resolviendo lo que sea...

Así que la próxima vez visita tu página de problemas/pull-requests de github y comprueba esa pull request en particular, verás tu mensaje con un enlace para confirmar donde hiciste la fusión.

Aquí hay una captura de pantalla de lo que quiero decir.

introduzca la descripción de la imagen aquí

 7
Author: Guillemo Mansilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 17:38:23

Para hacer eso vaya a la página de inicio de su repositorio, haga clic en ramas, y cambie la rama predeterminada de maestro a otra cosa, en mi caso "dev".

Después de eso, cada vez que alguien crea una solicitud de extracción, el botón merge fusionará automáticamente la solicitud en "dev" en lugar de master.

introduzca la descripción de la imagen aquí

 5
Author: abbood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 17:40:21