Como posso verificar uma solicitação pull do GitHub com o git?


251

Gostaria de verificar uma solicitação de recebimento criada anteriormente (criada via interface da web do GitHub). Pesquisei e encontrei lugares diferentes onde um refs / pull ou refs / pull / pr

Mas quando adiciono fetch = +refs/pull/*/head:refs/remotes/origin/pr/*ao arquivo de configuração git e faço uma busca git

O que estou fazendo de errado? O GitHub deve criar automaticamente o material pull / xyz ou preciso configurar algo?


Como é a seção remota completa do seu arquivo de configuração?



Eu acabei com essa pergunta, mas eu realmente precisava de stackoverflow.com/q/1783405/2413303
EpicPandaForce

1
O segundo parágrafo não é uma frase completa. "Mas quando eu adiciono ... e faço uma busca por git" - quando você faz essas coisas, o que acontece?
cp.engr

Respostas:


385

Para buscar um PR remoto em seu repositório local,

git fetch origin pull/ID/head:BRANCHNAME

onde IDé o ID da solicitação de recebimento e BRANCHNAMEé o nome da nova ramificação que você deseja criar. Depois de criar a ramificação, basta

git checkout BRANCHNAME

Veja a documentação oficial do GitHub para mais.


11
Eu usei isso para buscar um PR de um repo upstream no meu repo bifurcado local, você pode substituir a origem pelo upstream também.
Jngai1297

18
Meu comando acabou parecendo git fetch origin pull/1/head:githubusername, não o que eu estava esperando
Anthony

1
como reverter?
precisa saber é o seguinte

8
@Antoine BRANCHNAMEé o nome que você deseja nomear o ramo. Suponho que você tentou usar um nome que já existia (por exemplo master) e que não funcionava, então você tentou seu nome de usuário, que funcionou, porque não havia ramificação com esse nome. Talvez eu entenda mal o que você estava dizendo.
Nateowami

1
Pode ser que você tenha configurado seu repositório local da maneira que originaponta para o seu fork e upstream- para o repositório original (seguindo help.github.com/articles/configuring-a-remote-for-a-fork , por exemplo). Certifique-se de alterar originpara upstreamno comando mencionado, se desejar buscar a solicitação pull do repositório original.
Mvlabat

126

Isso será buscado sem que você precise nomear um ramo:

git pull origin pull/939/head

Como obtenho uma solicitação de recebimento específica na minha máquina?


Isso é suficiente, tks
rll

Este trabalhou para mim, de Timbó buscar método fez algo, mas não a coisa certa
malhal

30
Observe que, se você fizer isso no ramo principal, por exemplo, ele será confirmado diretamente nesse ramo. Se você deseja trazer a solicitação pull para uma ramificação separada para preparação, tente a resposta do @ timbo.
Phoenix

3
O mesmo aconteceu com o @phoenix. Quero que a ramificação de solicitação de recebimento seja duplicada na minha máquina sob sua própria ramificação, não mestre.
Paul Chernoch

Isso também funciona se você desejar extrair alterações da solicitação de recebimento para sua filial local.
luator

52

Essa essência descreve o que aconteceu quando você faz uma busca por git:

Obviamente, altere o URL do github para corresponder ao URL do seu projeto. E acaba assim:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Agora, busque todas as solicitações pull:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

Para verificar uma solicitação de recebimento específica:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

Você tem vários scripts listados nos problemas 259 para automatizar essa tarefa.
O projeto git-extras propõe o comando git-pr(implementado no PR 262 )

git-pr(1) - Confira uma solicitação de recebimento localmente

SINOPSE

git-pr <number> [<remote>]
git-pr clean

DESCRIÇÃO

Cria uma ramificação local com base em um número de solicitação de recebimento do GitHub e depois muda para essa ramificação.

O nome do controle remoto para o qual buscar. O padrão é origin.

EXEMPLOS

Isso verifica a solicitação 226de recebimento de origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

Prefiro buscar e efetuar o checkout sem criar uma filial local e estar no estado destacado HEAD . Ele permite que eu verifique rapidamente a solicitação de recebimento sem poluir minha máquina local com ramificações locais desnecessárias.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

onde IDé um ID de solicitação de recebimento e upstreamonde a solicitação de recebimento original foi criada (pode ser origin, por exemplo).

Espero que ajude.


1
Eu gosto desta solução. Um dos benefícios é que, se o PR for atualizado com mais confirmações, você poderá executá-lo novamente e isso atrairá os novos comprometimentos.
21319 Alex Johnson

14

Fazendo referência à resposta de Steven Penny, é melhor criar um ramo de teste e testar o PR. Então aqui está o que você faria.

  1. Crie uma ramificação de teste para mesclar o PR localmente. Supondo que você esteja no ramo principal:

git checkout -b test

  1. Obter as alterações de relações públicas no ramo de teste

git pull origin pull/939/head:test

Agora, você pode testar com segurança as alterações nesse ramo de teste local (neste caso, denominado teste ) e, quando estiver satisfeito, poderá mesclá-lo como de costume no GitHub.


1
Eu iria ainda melhor - eu criaria uma árvore de trabalho, a definiria para uma nova testramificação e ENTÃO puxaria o PR - dessa maneira não preciso restaurar ramificações localmente quando terminar; Acabei de descartar a árvore de trabalho. Na verdade, NUNCA checkout -bmais - sempre crio uma árvore de trabalho e depois ramifico. Disco é barato. Claro, eu tenho um script que faz isso; Não digito todo o comando necessário individualmente.
Mpersico

11

Se você estiver usando o Github.com, vá para "Solicitações de recebimento", clique na solicitação de recebimento relevante e clique no link "instruções da linha de comando": instruções de linha de comando no Github.com


Digamos, existe realmente uma maneira - quando você está olhando para o github.com - para baixar os arquivos novos / alterados, do PR? Portanto, quando você estiver visualizando um repositório no github, poderá clicar no prático botão "baixar como um zip" ou, de fato, pode simplesmente clicar e ver cada arquivo (inteiro) do projeto. Para relações públicas, não consigo ver como, simplesmente, clicar para "olhar o arquivo" - entende o que quero dizer? Estou esquecendo de algo? Felicidades!
Fattie

9

Você pode usar o git configcomando para escrever uma nova regra .git/configpara buscar solicitações pull do repositório:

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

E então apenas:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

O problema com algumas das opções acima é que, se alguém enviar mais confirmações ao PR após abrir o PR, elas não fornecerão a versão mais atualizada. Para mim, o que funcionou melhor - vá para o PR e pressione 'Commits', role para baixo para ver o hash de commit mais recente insira a descrição da imagem aqui e, em seguida, simplesmente use git checkout, ou seja,

git checkout <commit number>

no exemplo acima

git checkout 0ba1a50


2
Encontrei exatamente esse problema com a git fetch origin pull/ID/head:BRANCHNAMEabordagem mencionada em stackoverflow.com/a/30584951/659732 . Obrigado pela solução!
joewiz

6

Estou usando o hub, uma ferramenta do github: https://github.com/github/hub

Com o hub, verificar uma solicitação localmente é meio fácil:

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234

5

Para Bitbucket, você precisa substituir a palavra pullpara pull-requests.

Primeiro, você pode confirmar o estilo do URL da solicitação de recebimento por git ls-remote origincomando.

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

Como você pode ver, é em refs/pull-requests/1503/fromvez derefs/pull/1503/from

Então você pode usar os comandos de qualquer uma das respostas.


4

Acidentalmente, acabei escrevendo quase o mesmo que o fornecido pelo git-extras. Portanto, se você preferir um único comando personalizado, em vez de instalar vários outros comandos extras, basta colocar esse git-prarquivo em algum lugar no seu $PATHe, em seguida, basta escrever:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

Se você estiver seguindo o fluxo de trabalho "garfo do github", crie um garfo e adicione o repositório remoto upstream:

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

Para acessar sua ramificação atual, seu comando seria semelhante a:

git pull upstream pull/<pull_request_number>/head

Para entrar em uma nova ramificação, o código seria semelhante a:

git fetch upstream pull/<pull_request_number>/head:newbranch

3

O Github lançou recentemente um utilitário cli chamado github-cli . Depois de instalá-lo, você pode fazer o checkout local de uma ramificação de solicitação pull usando seu ID

por exemplo: gh pr checkout 2267

Observe que este pacote ainda está na versão beta


1

Coloque a filial remota do PR na filial local:

git fetch origin ‘remote_branch’:‘local_branch_name’

Defina o upstream da filial local como filial remota.

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

Quando você deseja enviar novamente as alterações locais para a ramificação PR

git push origin HEAD:remote_PR_Branch_name


0

Suponha que suas informações de origem e upstream sejam como abaixo

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

e o nome do seu ramo é como

   <repo_owner>:<BranchName>

então

   git pull origin <BranchName>

deve fazer o trabalho


Quando você compartilhou o código, tente explicá-lo
Yunus Temurlenk

-2

Se as confirmações deles estiverem no ramo principal do repositório bifurcado, você poderá fazer o seguinte.

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
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.