Trova una richiesta pull su Github in cui è stato originariamente creato un commit


171

Le richieste pull sono ottime per comprendere il pensiero più ampio su un cambiamento o una serie di modifiche apportate a un repository. Leggere le richieste pull è un ottimo modo per "ingannare" rapidamente un progetto in quanto, anziché piccole modifiche atomiche alla sorgente, si ottengono raggruppamenti più grandi di modifiche logiche. Analogamente all'organizzazione delle righe del codice in "stanze" correlate per facilitarne la lettura.

Mi ritrovo a guardare un file o un commit e mi chiedo se esiste un modo per rintracciare il commit nella richiesta pull che lo ha originariamente creato. Quella richiesta pull sarebbe stata unita alla fine, ma non necessario con un commit di unione.


1
+1 Questo è utile anche se hai biforcuto un progetto e hai un vecchio ramo di lavoro in giro e non ricordi più se hai mai fatto un PR per esso.
Steve Clay,

Risposte:


226

Puoi semplicemente andare su github e inserire la SHA nella barra di ricerca, assicurati di selezionare il link "Problemi" sulla sinistra.

AGGIORNATO 13 luglio 2017

Tramite l'interfaccia utente di Github c'è un modo davvero semplice per farlo. Se stai esaminando un commit nell'elenco di commit in una succursale nell'interfaccia utente, fai clic sul collegamento al commit stesso. Se esiste un PR per quel commit e non è stato aggiunto direttamente al ramo, un link al PR che elenca il numero PR e il ramo in cui è andato sarà direttamente sotto il messaggio di commit nella parte superiore della pagina. inserisci qui la descrizione dell'immagine


Esempio di ricerca di un PR facendo clic su un collegamento al commit

Se hai il commit SHA e nient'altro e non vuoi andare a cercarlo, aggiungi /commit/[commit SHA]l'URL repository e vedrai la pagina di commit, con il link PR se esiste. Ad esempio, se SHA è 52797a7a3b087231e4e391e11ea861569205aaf4 e il repository è https://github.com/glimmerjs/glimmer-vm , quindi visitare https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b087231e439


Non riesco a farlo funzionare con un breve SHA come e4077951, funziona ancora per te?
Matt Sanders,

@RustyToms funziona, ma quando ho cercato un hash di commit come hai menzionato, [ github.com/wso2/carbon-kernel/… mi fornisce due richieste Pull entrambe hanno unito lo stesso commit al master. In tale tipo di scenario, ciò che dovremmo selezionare come richiesta Pull che ha unito il commit pertinente
Kasun Siyambalapitiya,

@RustyToms come possiamo ottenere questo attraverso l'API
Kasun Siyambalapitiya

1
@marathon c'è un modo ancora più semplice per farlo ora, aggiornerò la risposta
RustyToms

1
Se non vi è alcun riferimento a un PR, posso concludere che non esiste alcun PR? Cioè, il commit è stato effettuato direttamente sul ramo (di solito master)?
Erik,

53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

Se necessario, passare original nome del telecomando che punta al repository github a cui sarebbe stata inviata la richiesta pull. Il primo comando deve essere eseguito solo una volta per ogni dato telecomando, e il secondo verrà generalmente eseguito quando si ottengono altri aggiornamenti.

Questo farà sì che git ottenga informazioni sulle richieste pull insieme ai rami effettivi. Verranno visualizzati come filiali di tracciamento remoto come origin/pull/123. Fatto ciò, è possibile utilizzare git describecon le opzioni --alle --containsper mostrare il primo ramo con il commit a cui si fa riferimento.

Tuttavia, questo non funzionerà se il commit che stai cercando è in realtà una versione modificata del commit dalla richiesta pull, ad esempio se le modifiche sono state ridisegnate su altri lavori o se la persona che fa l'unione ha deciso di apportare alcune modifiche.


Presumo che ciò comporti il ​​download di tutti gli commit in PR rifiutate. Non c'è modo di far recuperare l'elenco dei pull/*/headcommit senza i BLOB? Come si potrebbe "ripulire" dopo questo (riconfigurare le origini)?
Steve Clay,

1
Questo è fantastico da sapere; Non avevo idea che GitHub li seguisse come veri e propri oggetti Git, ma ha perfettamente senso. A proposito, intendevi usare "upstream" invece di "origin" sul tuo comando di configurazione?
Tobias J,

1
@TobyJ L'uso di è upstreamstato davvero un errore. L'avevo copiato da un repository che aveva quella configurazione in cui il telecomando era stato chiamato upstreame avevo perso quell'occorrenza quando l'ho cambiato per usare il più comune origincome nome del telecomando. Ho modificato la risposta per risolverlo.
qqx

Grazie! Ma è così complicato. Vorrei che ci fosse un collegamento alla richiesta pull contenente sull'interfaccia utente web.
Daniel Darabos,

dopo puoi anche provare a usare refs/remotes/origin/pr/*invece direfs/remotes/origin/pull/*
elaichi

21

Dal 13 ottobre 2014, questo dovrebbe essere semplice:

Per esempio:

Puoi vedere per il file hakimel/reveal.js/plugin/markdown/markdown.js, il mio contributo ora arriva con un riferimento al PR # 734 da cui è nato.

PR di contrib

Questo deriva dal collegamento di richieste pull unite da commit :

Abbiamo incluso i rami e i tag contenenti nelle pagine di commit per darti più contesto riguardo alle modifiche. Ora, i commit nel ramo predefinito di un repository mostreranno anche la richiesta pull che li ha introdotti.

impegnarsi con riferimento PR in esso!

Nella richiesta pull, puoi vedere la discussione sul perché è stato introdotto il commit e avere un quadro più chiaro del motivo della modifica.

Come sempre, se si conosce il commit SHA, è possibile saltare la pagina di commit e cercare direttamente la richiesta pull .


quando ho cercato un hash di commit come hai menzionato, [ github.com/wso2/carbon-kernel/… mi fornisce due richieste Pull entrambe hanno unito lo stesso commit al master. In tale tipo di scenario, ciò che dovremmo selezionare come richiesta Pull che ha unito il commit pertinente
Kasun Siyambalapitiya,

@KasunSiyambalapitiya Non sono sicuro: potresti fare una nuova domanda per quello. Vorrei andare con il più recente.
VonC,

2
possiamo ottenerlo a APIlivello?
Kasun Siyambalapitiya,

@KasunSiyambalapitiya Buona domanda. Non lo so. Non vedo quel riferimento in developer.github.com/v3/repos/commits/#get-a-single-commit
VonC

@esp Interessante. Vedo un elenco di PR, ma non il loro impegno SHA1 che segna la loro integrazione.
VonC,


3

Ho avuto lo stesso problema e ho scritto l'helper pr_for_sha bash, documentato qui:

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

Chiamalo come pr_for_sha <COMMIT>e aprirà la corrispondente pagina di richiesta pull in github in un browser.


2
Questa soluzione presuppone che l'unione più vicina a seguito del commit sia l'unione che contiene il commit, che non è sempre necessariamente il caso.
Jason Denney,

@JasonDenney Seguendo intendi nel ramo dato o nel tempo?
LeZuse

Hmm, questo era un po 'di tempo fa, ma penso che intendevo in tempo. Di 'che lunedì fai un commit "X" nel ramo A, martedì fai un commit nel ramo B e unisci il ramo B al master, mercoledì unisci il ramo A al master. Se hai usato questo script per fare una ricerca mentre ti trovavi sul ramo principale per il quale si trovava il commit PR "X", sono abbastanza sicuro che ti avrebbe erroneamente detto al ramo B. Però ricontrolla te stesso.
Jason Denney

Non riesco a far funzionare il git logcomando. 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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.