¿Cómo aplicar solicitudes de extracción ascendentes no fusionadas de otras bifurcaciones en mi bifurcación?
Un proyecto en GitHub del que tengo una bifurcación tiene nuevas solicitudes de extracción que quiero incluir en mi bifurcación y que el autor aún no ha incluido.
¿Existe una forma sencilla de aplicar solicitudes de extracción de otras bifurcaciones en mi bifurcación? ¿Hay algo más aquí que me falta?
Actualización: a través de la página web
También puedes hacer esto a través de la página web de github.
Supongo que ya debería tener una bifurcación ( MyFork
) del repositorio común ( BaseRepo
) que tiene la solicitud de extracción pendiente de una bifurcación ( OtherFork
) que le interesa.
- Navegue hasta la bifurcación (
OtherFork
) que inició la solicitud de extracción que desea incluir en su bifurcación (MyFork
). - Vaya a la página de solicitudes de extracción de
OtherFork
- Haga clic en nueva solicitud de extracción
- Se deben ofrecer las solicitudes de extracción pendientes. Recuerde seleccionar
OtherFork
la sucursal adecuada también. Seleccione en el lado izquierdo como base su horquilla (MyFork
) ( IMPORTANTE ). - Ahora la opción de
View pull request
debería cambiar aCreate pull request
. Haga clic en esto.
Ahora deberías tener una solicitud de extracción pendiente en tu bifurcación ( MyFork
), que simplemente puedes aceptar.
Puedes hacerlo manualmente con bastante facilidad:
agregue la otra bifurcación como control remoto de su repositorio:
git remote add otherfork git://github.com/request-author/project.git
buscar las confirmaciones de su repositorio
git fetch otherfork
Luego tiene dos opciones para aplicar la solicitud de extracción (si no desea elegir, elija 1).
Si no le interesa aplicar también las eventuales confirmaciones que se agregaron entre el origen y la solicitud de extracción, puede simplemente cambiar la rama en la que se formó la solicitud de extracción.
git rebase master otherfork/pullrequest-branch
Si solo desea las confirmaciones en la solicitud de extracción, identifique su SHA1 y haga
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
Como dijo Tekkub anteriormente, puedes simplemente tirar de la rama directamente. La mayoría de las veces con GitHub, la rama es simplemente "maestra" en la bifurcación del usuario solicitante del proyecto.
Ejemplo:git pull https://github.com/USER/PROJECT/ BRANCH
Y como ejemplo práctico:
Supongamos que bifurcó un proyecto de github llamado safaribooks y existe la siguiente solicitud de extracción, en el proyecto original, que desea colocar en su bifurcación:
Luego, en la carpeta del proyecto clonado de tu bifurcación, ejecuta:
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
Las solicitudes de extracción para el proyecto pueden provenir de muchos autores diferentes (bifurcaciones) y probablemente no desee un control remoto separado para cada bifurcación. Además, no desea hacer ninguna suposición sobre la rama que utilizó el autor al enviar la solicitud de extracción o qué más podría haber en la rama maestra del autor. Por lo tanto, es mejor hacer referencia a la solicitud de extracción tal como aparece en el repositorio ascendente, en lugar de como aparece en las otras bifurcaciones.
Paso 1:
git remote add upstream <url>
Probablemente ya haya realizado este paso, pero si no, querrá definir un control remoto para el proyecto ascendente. La URL es la URL clonada del proyecto que bifurcaste. Más información en Configuración de un control remoto para una bifurcación y Sincronización de una bifurcación . upstream
es el nombre que le estás dando al control remoto, y si bien puede ser cualquier cosa, upstream
es el nombre convencional.
Paso 2:
git pull upstream refs/pull/{id}/head
... ¿dónde {id}
está el número de solicitud de extracción? upstream
es el nombre del control remoto desde el que realizar la extracción, es decir, simplemente "upstream" si siguió exactamente el paso 1. También puede ser una URL, en cuyo caso puedes omitir el paso 1.
Paso 3:
Escriba un mensaje de confirmación para la confirmación de fusión. Puedes mantener el valor predeterminado, aunque recomiendo dar un buen resumen de una línea con el número de solicitud de extracción, el problema que soluciona y una breve descripción:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
Alguna información más detallada que funcionó para mí.
Mi archivo .git/config para el repositorio bifurcado se ve así:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = [email protected]:litzinger/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "source"]
url = git://github.com/revolunet/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/source/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Luego ejecute "git fetch source", que luego enumera todas las solicitudes de extracción del repositorio bifurcado.
* [new ref] refs/pull/54/head -> origin/pr/54
* [new ref] refs/pull/67/head -> origin/pr/67
* [new ref] refs/pull/69/head -> origin/pr/69
* [new ref] refs/pull/71/head -> origin/pr/71
Y luego, para fusionar en una solicitud de extracción específica, ejecute "git merge master origin/pr/67"