Encuentre una solicitud de extracción en Github donde se creó originalmente una confirmación

171

Las solicitudes de extracción son excelentes para comprender el pensamiento más amplio sobre un cambio o conjunto de cambios realizados en un repositorio. Las solicitudes de extracción de lectura son una excelente manera de "asimilar" rápidamente un proyecto ya que, en lugar de pequeños cambios atómicos en la fuente, se obtienen agrupaciones más grandes de cambios lógicos. De manera análoga a organizar las líneas en su código en "estrofas" relacionadas para que sea más fácil de leer.

Me encuentro mirando un archivo o una confirmación, y me pregunto si hay una manera de dar marcha atrás a la confirmación de la solicitud de extracción que originalmente la creó. Esa solicitud de extracción se habría fusionado eventualmente, pero no sería necesario con un compromiso de fusión.

DragonFax
fuente
1
+1 Esto también es útil si bifurcas un proyecto y tienes una vieja rama de trabajo sentada y ya no recuerdas si alguna vez hiciste un RP para él.
Steve Clay

Respuestas:

226

Puede ir a github e ingresar el SHA en la barra de búsqueda, asegúrese de seleccionar el enlace "Problemas" a la izquierda.

ACTUALIZADO 13 de julio de 2017

A través de la interfaz de usuario de Github, ahora hay una manera realmente fácil de hacer esto. Si está buscando una confirmación en la lista de confirmaciones en una rama en la interfaz de usuario, haga clic en el enlace a la confirmación misma. Si hay un RP para esa confirmación y no se agregó directamente a la rama, un enlace al RP que enumera el número de RP y la rama a la que ingresó estará directamente debajo del mensaje de confirmación en la parte superior de la página. ingrese la descripción de la imagen aquí


Ejemplo de encontrar un RP haciendo clic en un enlace a la confirmación

Si tiene el SHA commit y nada más y no quiere buscarlo, solo agréguelo /commit/[commit SHA]a la url del repositorio y verá la página commit, con el enlace PR si existe. Por ejemplo, si el SHA es 52797a7a3b087231e4e391e11ea861569205aaf4 y el repositorio es https://github.com/glimmerjs/glimmer-vm , entonces vaya a https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b154111111115115111205

RustyToms
fuente
No puedo hacer que esto funcione con un SHA corto e4077951, ¿todavía funciona para ti?
Matt Sanders el
@RustyToms esto funciona, pero cuando busqué un hash de confirmación como mencionaste, [ github.com/wso2/carbon-kernel/… me proporcionó dos solicitudes de extracción , ambas fusionaron la misma confirmación con el maestro. En este tipo de escenario, lo que deberíamos seleccionar como la solicitud de
extracción
@RustyToms, ¿cómo podemos lograr esto a través de la API
Kasun Siyambalapitiya
1
@marathon hay una manera aún más fácil de hacerlo ahora, actualizaré la respuesta
RustyToms
1
Si no hay referencia a un RP, ¿puedo concluir que no hubo RP? Es decir, ¿la confirmación se realizó directamente en la rama (generalmente master)?
Erik
53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

Si es necesario, cambie origin el nombre del control remoto que apunta al repositorio de github al que se habría enviado la solicitud de extracción. El primer comando solo necesita ejecutarse una vez para cualquier control remoto dado, y el segundo generalmente se realizará al obtener otras actualizaciones.

Esto hará que git obtenga información sobre solicitudes de extracción junto con ramas reales. Aparecerán como ramas de seguimiento remoto como origin/pull/123. Una vez hecho esto, puede usar git describecon --ally--contains opciones para mostrar la primera rama que tiene el compromiso referenciado.

Sin embargo, esto no funcionará si la confirmación que está buscando es en realidad una versión modificada de la confirmación de la solicitud de extracción, como por ejemplo si los cambios se volvieron a basar en otro trabajo o si la persona que realiza la fusión decidió realizar algunos cambios.

qqx
fuente
Supongo que esto da como resultado la descarga de todas las confirmaciones en los RP rechazados. ¿No hay forma de que fetch obtenga la lista de pull/*/headconfirmaciones sin los blobs? ¿Cómo se "limpiaría" después de esto (reconfigurar los orígenes)?
Steve Clay
1
Esto es genial saberlo; No tenía idea de que GitHub los rastreaba como objetos Git reales, pero tiene mucho sentido. Por cierto, ¿querías usar "upstream" en lugar de "origin" en tu comando de configuración?
Tobias J
1
@TobyJ El uso de upstreamfue realmente un error. Copié eso de un repositorio que tenía esa configuración donde se nombraba el control remoto upstreamy perdí esa ocurrencia al cambiarlo para usar el más común origincomo el nombre del control remoto. He editado la respuesta para arreglar eso.
qqx
¡Gracias! Pero esto es muy complicado. Desearía que hubiera un enlace a la solicitud de extracción que contiene en la interfaz de usuario web.
Daniel Darabos
fwiw también puedes intentar usar en refs/remotes/origin/pr/*lugar derefs/remotes/origin/pull/*
elaichi
21

Desde el 13 de octubre de 2014, esto debería ser sencillo:

Por ejemplo:

Puede ver el archivo hakimel/reveal.js/plugin/markdown/markdown.js, mi contribución ahora viene con una referencia al PR # 734 que originó.

PR de contrib

Esto viene de vincular solicitudes de extracción fusionadas de commits :

Hemos incluido las ramas y etiquetas que contienen en las páginas de confirmación para darle más contexto sobre los cambios. Ahora, las confirmaciones en la rama predeterminada de un repositorio también le mostrarán la solicitud de extracción que las introdujo.

comprometerse con referencia de relaciones públicas en él!

En la solicitud de extracción, puede ver la discusión sobre por qué se introdujo la confirmación y obtener una imagen más clara del motivo del cambio.

Como siempre, si conoce el SHA de confirmación, puede omitir la página de confirmación y buscar la solicitud de extracción directamente .

VonC
fuente
cuando busqué un hash de confirmación como usted mencionó, [ github.com/wso2/carbon-kernel/… me proporcionó dos solicitudes de extracción , ambas fusionaron la misma confirmación con el maestro. En este tipo de escenario, lo que deberíamos seleccionar como la solicitud de
extracción
@KasunSiyambalapitiya No estoy seguro: podría hacer una nueva pregunta para eso. Yo iría con lo más reciente.
VonC
2
¿podemos obtener esto en el APInivel?
Kasun Siyambalapitiya
@KasunSiyambalapitiya Buena pregunta. No lo sé. No veo esa referencia en developer.github.com/v3/repos/commits/#get-a-single-commit
VonC
@esp Interesante. Veo una lista de relaciones públicas, pero no su compromiso SHA1 que marca su integración.
VonC
10

Coloque el hash de confirmación en el campo Filtros de solicitud de extracción en GitHub.

ingrese la descripción de la imagen aquí

Dan Rosenstark
fuente
Esta es la mejor manera de IMO, si el PR aún no se fusionó.
Sebastian Wagner
3

Tuve el mismo problema y escribí el pr_for_sha bash helper, documentado aquí:

http://joey.aghion.com/find-the-github-pull-request-for-a-commit/

Llámelo como pr_for_sha <COMMIT>y se abrirá la página de solicitud de extracción de github correspondiente en un navegador.

Joey
fuente
2
Esta solución supone que la fusión más cercana después de la confirmación es la fusión que contiene la confirmación, lo que no siempre es necesariamente el caso.
Jason Denney
@JasonDenney ¿Por seguir te refieres a la rama dada o a tiempo?
LeZuse
Hmm, esto fue hace un tiempo, pero creo que quise decir a tiempo. Digamos que el lunes hace una confirmación "X" en la rama A, el martes hace una confirmación en la rama B y fusiona la rama B con la maestra, el miércoles combina la rama A con la maestra. Si utilizó este script para realizar una búsqueda mientras estaba en la rama maestra en la que estaba la confirmación PR "X", estoy bastante seguro de que le dirá incorrectamente la rama B. Sin embargo, compruebe usted mismo.
Jason Denney
No se puede hacer que el git logcomando funcione. git log --merges --ancestry-path --oneline 66100ab0..master- fatal: ambiguous argument '66100ab0..master': unknown revision or path not in the working tree.-git version 2.25.0
Gianfranco P.