¿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 la solicitud de extracción de otras bifurcaciones en mi bifurcación? ¿Hay algo más aquí que me falta?

preguntado el 16 de mayo de 11 a las 19:05

¿Esto se refleja en el gráfico de red en GitHub si usa comandos git para hacerlo? -

También puede ser interesante encontrar todas las ramas también: stackoverflow.com/q/47798937/10245 -

7 Respuestas

Puede 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
    
  • Entonces tiene dos opciones para aplicar la solicitud de extracción (si no desea elegir la opción 1).

    1. Si no le importa aplicar también las confirmaciones eventuales que se han agregado entre el origen y la solicitud de extracción, puede simplemente reajustar la rama en la que se formó la solicitud de extracción.

      git rebase master otherfork/pullrequest-branch
      
    2. Si solo desea las confirmaciones en la solicitud de extracción, identifique su SHA1 y haga

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      

Respondido el 04 de junio de 13 a las 10:06

En realidad, no debe usar cherry-pick, crea nuevas confirmaciones ... lo que a su vez causará confusión si envía una solicitud de extracción en sentido ascendente. En su lugar, debe fusionar tal como lo solicita la solicitud de extracción. Tampoco es necesario agregar un control remoto. git pull URL branchname - Tekkub

@Tekkub: de acuerdo, puede ser mejor evitar confusiones con las confirmaciones recién creadas. Fusionar es menos elegante en mi opinión, ya que puede traer otros cambios de la rama con la que se está fusionando: CharlesB

Sí, pero en este caso preguntó específicamente cómo introducir la solicitud de extracción en su tenedor. Tire == fusionar. - Tekkub

@CharlesB, dado que GitHub agrega automáticamente nuevas confirmaciones en la misma rama a una solicitud de extracción, ¿no sería difícil obtener "otros cambios" (asumiendo que el solicitante sigue las mejores prácticas y coloca los cambios en una rama separada del desarrollo continuo, por lo que que todas las confirmaciones son relevantes), a menos que a lo que te refieres es cuando solo quieres parte de una solicitud de extracción? - Neverfox

Para aquellos que comparten mi error mental, "otherfork" no hace referencia al repositorio original, hace referencia a la confirmación de la bifurcación que emitido la solicitud de extracción al repositorio original. Ignore el repositorio original y vaya directamente a la bifurcación que realizó la solicitud de extracción. Desea extraer manualmente la confirmación a la que hace referencia la extracción y fusionarla con la suya. - Michael Khalili

Actualización: vía página web

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

Supongo 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) Estas interesado en.

  1. Navega hasta la bifurcación (OtherFork) que ha iniciado la solicitud de extracción que desea ingresar en su bifurcación (MyFork)
  2. Vaya a la página de solicitudes de extracción de OtherFork
  3. Haga clic en nueva solicitud de extracción
  4. Se deben ofrecer las solicitudes de extracción pendientes. Recuerde seleccionar la adecuada OtherFork rama también. Seleccione en el lado izquierdo como 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.

Respondido el 20 de junio de 20 a las 12:06

Funciona maravillosamente. Mucho más simple que la línea cmd y fácil de revisar los cambios. Gracias. - Alvéolos

Tuve problemas para encontrar cómo llegar al "OtroTenedor" en la interfaz de usuario. Para llegar fácilmente, simplemente modifique la URL con el nombre de usuario de github. es decir github.com/userName/repoName - Charles

No pude ver las solicitudes de extracción pendientes mencionadas en el paso 4. En su lugar, seleccioné la rama que correspondía a la solicitud de extracción realizada por OtherFork, desde el menú desplegable "comparar" de la derecha. Luego seleccioné el lado izquierdo como la bifurcación base como se describe arriba, ya que pude crear la solicitud de extracción. - seddónimo

Funciona a menos que no haya bifurcación. Por ejemplo: github.com/OculusVR/RakNet/pull/61/files - Milán Babuškov

Las palabras exactas del sitio de githubs pueden estar desactualizadas, pero el proceso es perfecto. Súper simple, ¡gracias! - kevnk

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 proyecto del Usuario solicitante.

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 de origen, que desea poner en su bifurcación:

enter image description here

Luego, en la carpeta del proyecto clonado de su fork, ejecute:

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

Respondido el 08 de Septiembre de 19 a las 17:09

La desventaja de esto es que la rama puede tener otras cosas además de la solicitud de extracción. Además, debe buscar la URL adecuada para la bifurcación del autor de la solicitud de extracción. Si quieres usar un one-liner, es mejor usar git pull https://github.com/{upstream/project} refs/pull/{id}/head en lugar de. - jbyler

@jbyler Si la rama tiene otras cosas, estoy bastante seguro de que GitHub habrá actualizado la solicitud de extracción con ellos de todos modos. - Tim Malone

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 suposiciones 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 es así, querrá un control remoto definido para el proyecto ascendente. La URL es la URL clonada del proyecto que bifurcó. Más info en Configurar un control remoto para una bifurcación y 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

... dónde {id} es el número de solicitud de extracción. upstream es el nombre del control remoto desde el que se extraerá, es decir, simplemente "aguas arriba" si siguió el paso 1 exactamente. También puede ser una URL, en cuyo caso puede omitir el paso 1.

Paso 3:

Escriba un mensaje de confirmación para la combinación de confirmació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 soluciona y una breve descripción:

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions

Respondido 21 Oct 14, 02:10

También vea un respuesta relacionada con una variante que crea una sucursal local con la solicitud de extracción en ella. Y una variante final: puedes usar git pull upstream refs/pull/{id}/head para obtener las confirmaciones en su repositorio local, luego haga referencia a ellas como FETCH_HEAD (p.ej git log ..FETCH_HEAD para ver qué hay en él, entonces git merge FETCH_HEAD) - jbyler

¿Cómo haría para reajustar, para que la solicitud de extracción esté en la cabeza y pueda evitar una burbuja de fusión? - Michael Johnston

Esta era la solución que necesitaba, porque el autor de la solicitud de extracción había eliminado su repositorio. - jswetzen

Sí, esto también funciona para fusionar un PR abierto desde un repositorio que ya no está disponible públicamente. - James

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 = git@github.com: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"

respondido 19 nov., 13:01

Edité mi .git / config y agregué las líneas ["fuente" remota], pero para el proyecto que me interesaba, las instrucciones funcionaron sin problemas. Amo esta respuesta. - philo vivero

Se pueden encontrar excelentes consejos relacionados en news.ycombinator.com/item?id=9051220 y help.github.com/articles/checking-out-pull-requests-locally insinúa este (increíble) control remoto de solo lectura específico de GitHub refs/pull/ espacio de nombres. - Philip Durbin

Si usa Smartgit, puede ver estas solicitudes de extracción (y las cerradas) en el gráfico de registro si agrega smartgit.branch.otherRefs=notes;pull a smartgit.properties según syntevo.com/doc/display/SG/System+Properties - también puede fusionarlos desde allí. - Tipo CAD

por cierto, también puedes probarlo en la línea de comando con git fetch source + refs / heads / *: refs / remotes / upstream / * + refs / pull / * / head: refs / remotes / origin / pr / * - lib

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 combinado los cambios en una rama de prueba, llamada test_fork. Para que ningún cambio ensucie mi árbol.

Opcionalmente, puede usar cherry-pick como se describe anteriormente para elegir una confirmación en particular si eso es más preferible.

Viajes felices :)

respondido 11 mar '12, 14:03

Utilizo un guión muy útil para esto. Ejecuto el script escribiendo:

git prfetch upstream

y obtiene todas las solicitudes de extracción de la bifurcación ascendente.

Para crear la secuencia de comandos, haga un archivo ~/bin/git-prfetch.

El archivo debe contener lo siguiente:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

Asegúrese de que su ruta incluya el script configurando:

export PATH="$HOME/bin:$PATH"

Puede agregar este archivo a ~/.bashrc para que el cambio sea permanente.

Ahora, asegúrese de agregar la bifurcación de la que desea obtener las solicitudes de extracción:

git remote add upstream https://github.com/user/repo.git

Y entonces

git prfetch upstream

Respondido 01 ago 19, 23:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.