¿Cómo cambiar la rama base de una solicitud de extracción?


79

Creé una solicitud de extracción en el proyecto en GitHub a una rama remota específica. Después de un tiempo, se eliminó la rama remota.

¿Cómo puedo cambiar la solicitud de extracción para que apunte a otra rama (específicamente master)?


3
También solicitado en: github.com/isaacs/github/issues/18 , mensaje enviado a GitHub, y estándar recibido "agregaremos a nuestra respuesta de seguimiento de errores interno".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:


79

Actualizado: como Michael señala a continuación, esto ahora es posible :

Ahora puede cambiar la rama base de una solicitud de extracción abierta. Una vez que haya 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.

Haga clic en el Editbotón junto al título de la solicitud de extracción para revelar el selector de rama base.

Un ejemplo animado de cómo cambiar la rama base de una solicitud de extracción.


Respuesta antigua

No puedes. Simplemente haga una nueva solicitud de extracción.


10
directo al grano, pero no estrictamente cierto: consulte esta respuesta.
Tom

7
Depender de la funcionalidad de la API indocumentada (y potencialmente no intencional) es una receta para la tristeza en el futuro.
Ámbar

15
Nadie dijo nada acerca de confiar en la funcionalidad de la API no documentada. Esta pregunta solicita la resolución de un problema único, no una solución continua con soporte permanente. De todos modos, decir que "no puedes" es simplemente falso.
Tom

5
De cualquier manera, la API indocumentada está rota ahora (vea los comentarios de la otra respuesta), y eso es bastante triste.
dequis

2
A partir del 15.08.2016 puede hacerlo. Vea la respuesta de Michael.
maliayas

35

Aunque no está documentado, puede hacer esto usando la API REST de GitHub.

El uso de la API se explica en esta respuesta , pero básicamente puede emitir una solicitud REST como esta:

$ curl --user "tom" \
       --request PATCH \
       --data '{"issue": "15", "head": "tom:new-branch", "base": "master"}' \
       https://api.github.com/repos/fred/fabproj/pulls

Esto cambiará la solicitud de extracción incorporada por el problema 15 en el fred/fabprojrepositorio para usar la new-branchrama en la tom/fabprojbifurcación.

Editar: Nota: según los comentarios, lo anterior es solo para adjuntar una nueva solicitud de extracción a un problema existente .


1
No se pudo hacer que funcione. Se quejó de que el campo issuetenía un valor incorrecto, tal vez sugiriendo que ya no puede cambiar las solicitudes de extracción ya instanciadas. Vergüenza.
mxcl

1
¿Estás seguro de que tu llamada API es correcta? Por lo que puedo decir, esto debería funcionar y está (un poco) documentado. Consulte developer.github.com/v3/pulls (y busque "Crear una solicitud de extracción" y luego consulte "Entrada alternativa")
Tom

14
Probé esto nuevamente hoy y puedo confirmar que ya no funciona. Seguiré explorando las API REST con la esperanza de descubrir otra forma de hacerlo.
Tom

1
Según los documentos del desarrollador, el tipo de solicitud debería ser PATCH. Otra cosa es que la modificación de cabeza / base no es compatible en este momento. Ref: developer.github.com/v3/pulls/#update-a-pull-request
Shekhar

4
Hola Jian, como Tom mencionó en los comentarios del 13 de diciembre de 2012, esto (¡lamentablemente!) Ya no funciona ... lo cual es una pena, ya que podría haberlo hecho bien hoy, pero ¡ay!
pvandenberk

19

A partir del 15/08/2016, esto ahora es posible de forma nativa a través de Github :

Ahora puede cambiar la rama base de una solicitud de extracción abierta. Una vez que haya 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.


cómo funciona es que uno presiona editar título, y luego aparece el botón "base:", listo para cambiar.
AnneTheAgile

2

Podría cambiar la rama de destino. Es cierto que no podemos editar el nombre de la rama de destino en el PR. Pero el truco consiste en cambiar el nombre de la rama a otra cosa y cambiar el nombre de la rama de destino a la que ya está presente en PR.

Ejemplo: Mi RP tiene un nombre como "dev-4.9". Hay otra rama que se llama "qa-4.9". Todo lo que quiero es que "qa-4.9" sea la rama de destino de PR. Pasos: 1 1) Cambiar el nombre de la rama "dev-4.9" a otra cosa "original-dev-4.9"

git checkout dev-4.9
git branch -w original-dev-4.9
git push origin original-dev-4.9

2) Cambie el nombre de la rama "qa-4.9" a "dev-4.9".

git checkout qa-4.9
git branch -w dev-4.9
git push origin dev-4.9 -f (force push to write entire branch to reflect dev-4.9)

3) Actualice la URL de PR y vea las confirmaciones en qa-4.9 reflejadas allí.


1

En lugar de perder todos los comentarios relacionados con un PR en una rama eliminada:

  1. cree la rama nuevamente localmente con el mismo nombre y el mismo contenido que la rama que desea fusionar;
  2. empuje esa rama para recrear la rama remota; y entonces
  3. reabrir el PR a la sucursal.

Por ejemplo, tiene un PR para branch1, que se elimina. Ahora desea fusionar para dominar y retener comentarios sobre su RP existente:

  1. maestro de git checkout
  2. git pull
  3. git checkout -b branch1
  4. git push
  5. reabrir su RP a branch1
  6. cuando se fusiona con branch1, fusionar con master.

Esto es un poco engañoso, pero mucho mejor que destruir muchos comentarios.


No lo seguí para empezar, así que solo para aclarar a otros lectores (ya sea> = tonto como yo), esto es para si usted tiene el control del repositorio al que se ha enviado su PR. Estaba buscando una manera de actualizar mi PR que envié a un proyecto de código abierto que no controlo.
rtpHarry


-2

En teoria...

se supone que debes usar github api .

ejemplo: editar solicitud de extracción con curl

curl --user "your_github_username" \
     --request PATCH \
     --data '{"title":"newtitle","body":"newbody",...}' \
     https://api.github.com/repos/:owner/:repo/pulls/:number

puede encontrar la lista detallada de datos en el documento de desarrollador de github

ejemplo: cambiar el nombre de mi solicitud de extracción

curl --user "jeremyclement" \
     --request PATCH \
     --data '{"title":"allows the control of files and folders permissions."}' \
     https://api.github.com/repos/Gregwar/Cache/pulls/9

pero en la práctica ...

parece que los campos head/labely head/refno son editables. Por ahora, la única solución parece ser la de Amber.


¿Qué agrega esto a las respuestas actuales?
Léo Lam

Confirma la respuesta de Amber a pesar de la de Tom.
hexaJer

2
Lo que confirma que esta respuesta no es necesaria en absoluto. Esto no agrega nada a las respuestas actuales. La respuesta de Tom ya tiene un aviso de que ya no se aplica, y los comentarios también lo indican.
Léo Lam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.