¿Clon de GitHub de solicitud de extracción?

Respuestas:

87

Puede clonar la rama que desee utilizando la -bopción y para la solicitud de extracción:

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

En su caso, la rama que desea clonar es la rama fuente de la solicitud de extracción ( feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support
inancsevinc
fuente
112

La forma más fácil de hacerlo es así:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

Ahora estará en una nueva sucursal que se encuentra en el estado de la solicitud de extracción.

Es posible que desee configurar un alias ejecutando

git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

Ahora puede verificar cualquier PR ejecutando git pr <pr_number>, o git pr <pr_number> <remote>si su control remoto github no tiene nombre origin.

Crónica
fuente
49
Mejor: git fetch origin pull/<#>/head:<local_branch_name>( vía )
schlamar
55
Me encontré referencia a esta respuesta tan a menudo, así que me quedé esto en mi .gitconfigarchivo con [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". De esa manera, solo git pr upstream 62escribo y lo siguiente que sé es que estoy en una nueva sucursal de PR # 62 desde arriba. Si siempre lo usa origin, podría codificarlo en lugar de $1, pero eso cambia para mí.
mate ---
@matt que supone que tiene un alias para el pago llamadoco
Michael McQuade
43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

p.ej:

$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611

Haz cambios, compromételos, PUSH y abre nuevas relaciones públicas desde tu fork en GitHub

wierzbiks
fuente
¿Cómo puedo fusionar estas sucursales localmente? Acabo de clonar y buscar una solicitud de extracción no fusionada como se indicó anteriormente, e intenté pagar el nombre de la sucursal, pero no aparecen cambios en mi editor de IDE / texto.
erginduran
17

Puede seguir las instrucciones en este resumen para poder revisar el control remoto directamente sin tener que descifrar su repositorio y sucursal.

Ejemplo de uso

Para uno de mis proyectos (github3.py) tengo lo siguiente en mi github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = [email protected]:sigmavirus24/github3.py

La primera línea es lo que es estándar para cada control remoto con la excepción de que githubse reemplaza por el nombre del control remoto. Lo que esto significa es que las cabezas remotas (o las cabezas de las ramas en ese servidor) se "asignan" a los remotos locales con el prefijo github/. Así que si lo hice git fetch githuby tenía una sucursal en GitHub que no fue notado ya localmente en mi máquina, sería descargar la rama y pude cambiar a ella, así: git checkout -t github/branch_name.

La segunda línea hace lo mismo, pero lo hace para solicitudes de extracción en lugar de ramas git estándar. Por eso lo ves refs/pull/*/head. Obtiene el encabezado de cada solicitud de extracción en GitHub y lo asigna a github/pr/#. Entonces, si alguien envía una solicitud de extracción y está numerada 62 (por ejemplo), haría lo siguiente:

git fetch github
git checkout -t github/pr/62

Y luego estaría en una rama local llamada pr/62(suponiendo que no existiera). Es agradable y significa que no tiene que hacer un seguimiento de los controles remotos o las ramas de otras personas.

Ian Stapleton Cordasco
fuente
2
Por qué no? Explica exactamente cómo hacer esto de una manera conveniente y eficiente.
Ian Stapleton Cordasco
Porque soy un novato, y ese documento es difícil de entender. Nunca habría llegado de "no entenderlo" al git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clonedocumento esencial.
Fresheyeball
66
Lo que hace el documento esencial es agregar un conjunto adicional de información (referencias o referencias) para obtener de GitHub. Cuando lo haces git fetch github, puedes hacerlo git co -t github/pr/#. Esto evita que tenga que copiar y pegar la URL remota, averiguar el nombre de la sucursal, etc. Luego obtendrá nombres de sucursal bien nombrados, concisos y precisos sin la molestia adicional. Pero entiendo que puede parecer abrumador.
Ian Stapleton Cordasco
Oh bien. ¡No sabía esto +1! ¿Me puede dar un ejemplo totalmente calificado?
Fresheyeball
@ sigmavirus24 muchas gracias por la información; Me pregunto si existe un truco similar para Bitbucket.
Petr Kozelka
8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

¿Cómo puedo obtener una solicitud de extracción no fusionada para una sucursal que no me pertenece?

Steven Penny
fuente
1
Note git pullcrea una fusión en la rama actual; generalmente para un RP que desea git fetchobtener solo el código original del autor (luego se puede acceder como FETCH_HEAD). Si desea una fusión, también vale la pena mencionar pull/2/merge(en lugar de pull/2/head): esto hace que GitHub le brinde la confirmación de fusión exacta que sucedería si hace clic en el botón [Fusionar] ahora.
Beni Cherniavsky-Paskin
6

Cuando un usuario envía una solicitud de extracción, está pidiendo que se fusionen algunos cambios de una rama en su clon de una bifurcación al repositorio de otro usuario.

Los cambios que desea se pueden obtener del origen de la solicitud de extracción. Para hacer esto, clone el repositorio del usuario ( git://github.com/berstend/frappe.git) y luego revise la rama desde la que creó la solicitud de extracción ( feature/mongoose-support).

adrianbanks
fuente
1

Después de instalar git-extras

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

Simplemente puedes usar git pr

$ git pr 62 [remote]
megawac
fuente
0

Esa solicitud de extracción muestra las confirmaciones del tenedor de esa persona para que pueda ver que está presionando sus cambios desde la feature/mongoose-supportrama.

Puedes clonar su repositorio y pagar esa rama

Kartik
fuente
0

Para mí fue tan simple como

git fetch origin pull/4/head

Donde 4fue encontrado aquí:

ingrese la descripción de la imagen aquí

stevec
fuente