Encontre uma solicitação de recebimento no Github onde um commit foi criado originalmente


171

As solicitações pull são ótimas para entender o pensamento mais amplo sobre uma alteração ou conjunto de alterações feitas em um repo. As solicitações pull de leitura são uma ótima maneira de agregar rapidamente um projeto, pois, em vez de pequenas alterações atômicas na fonte, você obtém grupos maiores de alterações lógicas. Análogo a organizar as linhas do seu código em "estrofes" relacionadas para facilitar a leitura.

Encontro-me olhando para um arquivo ou uma confirmação, e me pergunto se existe uma maneira de retroceder a confirmação para a solicitação de solicitação que originalmente o criou. Essa solicitação de recebimento seria mesclada eventualmente, mas não necessária com uma consolidação de mesclagem.


1
+1 Isso também é útil se você bifurcar um projeto e tiver um ramo de trabalho antigo instalado e não se lembrar mais se já fez um PR para ele.
22613 Steve

Respostas:


226

Você pode simplesmente acessar o github e inserir o SHA na barra de pesquisa, selecione o link "Problemas" à esquerda.

ATUALIZADO 13 de julho de 2017

Através da interface do usuário do Github, agora existe uma maneira muito fácil de fazer isso. Se você estiver olhando para uma confirmação na lista de confirmações em uma ramificação na interface do usuário, clique no link da confirmação. Se houver um PR para esse commit e ele não foi adicionado diretamente à ramificação, um link para o PR que listará o número do PR e a ramificação em que ele entrou estará diretamente abaixo da mensagem de commit na parte superior da página. insira a descrição da imagem aqui


Exemplo de localização de um PR clicando em um link para o commit

Se você possui o commit SHA e nada mais e não deseja procurar por ele, basta adicionar /commit/[commit SHA]ao URL do repositório e você verá a página de commit, com o link PR, se existir. Por exemplo, se o SHA for 52797a7a3b087231e4e391e11ea861569205aaf4 e o repositório for https://github.com/glimmerjs/glimmer-vm , acesse https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b08723eae4e391e


Não consigo fazer isso funcionar com um SHA curto e4077951, isso ainda funciona para você?
Matt Sanders

@RustyToms isso funciona, mas quando pesquisei um hash de confirmação como você mencionou, [ github.com/wso2/carbon-kernel/… me forneceu duas solicitações Pull, ambas mesclaram a mesma confirmação ao mestre. Nesse tipo de cenário que devemos selecionar como o pedido Pull que se fundiu cometer o relevante
Kasun Siyambalapitiya

@RustyToms como podemos conseguir isso através da API
Kasun Siyambalapitiya

1
@marathon há uma maneira ainda mais fácil de fazê-lo agora, eu vou atualizar a resposta
RustyToms

1
Se não houver referência a um PR, posso concluir que não houve PR? Ou seja, o commit foi feito diretamente no branch (normalmente 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 necessário, mude originpara o nome do controle remoto que aponta para o repositório do github para o qual a solicitação de recebimento teria sido enviada. O primeiro comando precisa ser executado apenas uma vez para um determinado controle remoto, e o segundo geralmente será realizado ao obter outras atualizações.

Isso fará com que o git obtenha informações sobre solicitações de recebimento junto com ramificações reais. Eles aparecerão como ramificações de rastreamento remoto origin/pull/123. Feito isso, você pode usar git describecom as opções --alle --containspara mostrar o primeiro ramo que possui o commit referenciado.

No entanto, isso não funcionará se o commit que você está procurando for realmente uma versão modificada do commit a partir da solicitação pull, como se as alterações tivessem sido rebaseadas em outro trabalho ou se a pessoa que efetuou a mesclagem decidiu fazer algumas alterações.


Suponho que isso resulta no download de todos os commits em PRs rejeitados. Não há como obter buscar a lista de pull/*/headconfirmações sem os blobs? Como alguém "se limpa" depois disso (reconfigura as origens)?
13133 Steve Clay

1
É ótimo saber disso; Eu não fazia ideia que o GitHub os rastreava como objetos reais do Git, mas faz todo o sentido. BTW você quis usar "upstream" em vez de "origin" no seu comando config?
Tobias J

1
@TobyJ O uso de upstreamfoi realmente um erro. Eu copiei isso de um repositório que tinha essa configuração em que o controle remoto foi nomeado upstreame perdi a ocorrência ao alterá-lo para usar o mais comum origincomo o nome do controle remoto. Eu editei a resposta para corrigir isso.
Qqx

Obrigado! Mas isso é tão complicado. Eu gostaria que houvesse um link para a solicitação de recebimento da interface do usuário da web.
Daniel Darabos

fwiw você também pode tentar usar em refs/remotes/origin/pr/*vez derefs/remotes/origin/pull/*
elaichi 9/17

21

Desde 13 de outubro de 2014, isso deve ser direto:

Por exemplo:

Você pode ver no arquivo hakimel/reveal.js/plugin/markdown/markdown.js, minha contribuição agora vem com uma referência ao PR # 734 que ele originou.

PR do contrib

Isso vem da vinculação de solicitações pull mescladas de confirmações :

Incluímos as ramificações e as tags que contêm as páginas de confirmação para fornecer mais contexto sobre as alterações. Agora, as confirmações na ramificação padrão de um repositório também mostrarão a solicitação de recebimento que as introduziu.

comprometer-se com referência PR nele!

Na solicitação de recebimento, é possível ver a discussão sobre o motivo da introdução do commit e obter uma imagem mais clara do motivo da mudança.

Como sempre, se você conhece o SHA de confirmação, pode pular a página de confirmação e procurar a solicitação de recebimento diretamente .


quando pesquisei um hash de confirmação como você mencionou, [ github.com/wso2/carbon-kernel/… me forneceu duas solicitações Pull, as duas mesclaram a mesma confirmação ao mestre. Nesse tipo de cenário que devemos selecionar como o pedido Pull que se fundiu cometer o relevante
Kasun Siyambalapitiya

@KasunSiyambalapitiya Não tenho certeza: você pode fazer uma nova pergunta para isso. Eu iria com o mais recente.
VonC 3/17/17

2
podemos obter isso em APInível?
Kasun Siyambalapitiya

@KasunSiyambalapitiya Good question. Eu não sei. Não vejo essa referência em developer.github.com/v3/repos/commits/#get-a-single-commit
VonC

@esp Interessante. Eu vejo uma lista de relações públicas, mas não o commit do SHA1 marcando sua integração.
VonC 8/06

10

Coloque o hash de confirmação no campo de filtros Pull Request no GitHub.

insira a descrição da imagem aqui


Esta é a melhor maneira da IMO, se o PR ainda não tiver sido fundido.
Sebastian Wagner

3

Eu tive esse mesmo problema e escrevi o pr_for_sha bash helper, documentado aqui:

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

Chame assim pr_for_sha <COMMIT>e ele abrirá a página de solicitação de recebimento do github correspondente em um navegador.


2
Esta solução pressupõe que a mesclagem mais próxima após a confirmação seja a mesclagem que contém a confirmação, o que nem sempre é o caso.
Jason Denney

@JasonDenney Seguindo você quer dizer no ramo ou no tempo?
precisa saber é

Hmm, isso foi há um tempo atrás, mas acho que quis dizer com o tempo. Digamos que na segunda-feira você fez um commit "X" no ramo A, na terça-feira você fez um commit no ramo B e mesclou o ramo B para dominar, quarta-feira você mesclou o ramo A para dominar. Se você usou esse script para fazer uma pesquisa enquanto estava no ramo mestre para o qual o commit PR "X" estava, tenho certeza de que ele informaria incorretamente o ramo B. No entanto, verifique novamente.
Jason Denney

Não é possível obter o git logcomando para funcionar. 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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.