¿Cómo aplicar solicitudes de extracción no fusionadas de otras bifurcaciones a mi bifurcación?


Un proyecto en GitHub del que tengo una bifurcación tiene una nueva solicitud de extracción que quiero introducir en mi bifurcación que el autor no ha introducido todavía.

¿Hay una forma sencilla de aplicar la solicitud de extracción de otras bifurcaciones en mi bifurcación? ¿Hay algo más aquí que me estoy perdiendo?

6 answers

Puede hacerlo manualmente con bastante facilidad:

  • Agrega el otro fork como un control remoto de tu repositorio:

    git remote add otherfork git://github.com/request-author/project.git
    
  • Obtener las confirmaciones de su repositorio

    git fetch otherfork
    
  • Tiene entonces dos opciones para aplicar la solicitud de extracción (si no desea elegir pick 1.)

    1. Si no te importa aplicar también las confirmaciones eventuales que se han agregado entre el origen y la solicitud de extracción, simplemente puedes rebase la rama en la que se realizó la solicitud de extracción formed

      git rebase master otherfork/pullrequest-branch
      
    2. Si solo quieres las confirmaciones en la pull request, identifica su SHA1 y haz

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      
 247
Author: CharlesB,
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
2013-06-04 06:01:27

Actualización: Vía Página web

También puedes hacer esto a través de la página web de github.

Asumo que ya deberías tener una bifurcación (MyFork) del repositorio común (BaseRepo) que tiene la solicitud de extracción pendiente de una bifurcación (OtherFork) en la que estás interesado.

  1. Navegue hasta la bifurcación (OtherFork) que ha iniciado la solicitud de extracción que desea introducir en su bifurcación (MyFork)
  2. Vaya a la página de pull requests de OtherFork
  3. Haga clic en nueva solicitud de extracción
  4. El pendiente pull request (s) debe ser ofrecido. Recuerde seleccionar la rama adecuada OtherFork también. Seleccione en el lado izquierdo como la horquilla base su horquilla (MyFork) (IMPORTANTE ).
  5. Ahora la opción de View pull request debería cambiar a Create pull request. Haz clic aquí.

Ahora debería tener una solicitud de extracción pendiente en su bifurcación (MyFork), que simplemente puede aceptar.

 223
Author: Hotschke,
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-03-20 10:21:57

Como Tekkub dijo anteriormente, puedes simplemente tirar de la rama directamente. La mayoría de las veces con GitHub, la rama es simplemente "master" en la bifurcación del Usuario solicitante del proyecto.

Ejemplo: git pull https://github.com/USER/PROJECT/ BRANCH

 66
Author: SciPhi,
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
2013-08-07 07:21:07

Algo de información más detallada que funcionó para mí.

My .el 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 enumeró 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"

 19
Author: Brian Litzinger,
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
2013-11-18 21:50:35

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 el autor usó 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 upstream, en lugar de como aparece en las otras bifurcaciones.

Paso 1:

git remote add upstream <url>

Probablemente ya se ha hecho este paso, pero si no, querrá un control remoto definido para el proyecto upstream. La URL es la URL clonada del proyecto que bifurcó. Más información en Configurar un control remoto para una bifurcacióny Sincronizar una bifurcación. upstream es el nombre que le está dando al control remoto, y aunque puede ser cualquier cosa, upstream es el nombre convencional.

Paso 2:

git pull upstream refs/pull/{id}/head

... donde {id} es el número de solicitud de extracción. upstream es el nombre del control remoto desde el que extraer, es decir, solo " upstream" si has seguido exactamente el paso 1. También puede ser una URL, en cuyo caso puede omitir el paso 1.

Paso 3:

Escriba un mensaje de confirmación para la confirmación de fusión. Puede 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 corrige y una breve descripción:

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
 14
Author: jbyler,
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-10-20 22:37:57

Lo que haría es lo siguiente;

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

Ahora he fusionado los cambios en una rama de prueba, llamada test_fork. Para que los cambios no ensucien mi árbol.

Opcionalmente puede usar cherry-pick como se describió anteriormente para seleccionar un commit en particular si eso es más preferible.

Feliz viaje:)

 9
Author: MindTooth,
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-03-11 10:31:34