Como eu posso buscar um pedido de pull não gotejado para um branch que eu não possuo?

Eu preciso puxar em uma solicitação pull específica (que ainda não foi processada no stream principal) no repository NServiceBus:

https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15

Obviamente, não é o meu repo, mas preciso das alterações que existem nesse pedido pull.

Qual é a melhor maneira de fazer isso?

Para buscar um pull no seu repository:

git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head 

Então faça o que quiser com FETCH_HEAD:

 git checkout -b new-branch FETCH_HEAD 
 git pull origin pull/28/head 

Ou

 git fetch origin pull/28/head:28 git checkout 28 

Posso extrair uma solicitação de recebimento ainda não mesclada?

Você consegue fazer isso:

1) Adicione o controle remoto upstream:

 git remote add upstream git@github.com:Particular/NServiceBus.git 

2) Depois disso, você pode verificar qualquer solicitação de recebimento para um novo ramo por seu ID:

 git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME 

Então você terá uma filial chamada NEW_BRANCH_NAME contendo o código PR.

Adicionando um alias:

Se você fizer isso com a mesma frequência que eu, convém configurar alguns aliases para isso. Eu tenho isso no meu .gitconfig:

 [alias] fetch-pr = "!f(){\ [ -z \"$1\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \ remote=${2:-origin}; \ branch=${3:-pr-$1}; \ git fetch $remote \"pull/$1/head:$branch\"; \ }; f " pr = "!f(){\ branch=${3:-pr-$1}; \ git fetch-pr \"$@\"; \ git switch $branch; \ }; f " 

Com o acima, eu posso fazer:

 git fetch-pr 123 # fetch PR #123 into branch pr-123 git fetch-pr 123 some-branch # fetch PR #123 into some-branch git pr 123 # fetch and switch to the branch 

Para situações difíceis (especialmente se você não tiver um git-repo com check out), acho que a maneira mais simples é aplicar um patch. Para isso basta abrir o pull-request no github e adicionar um “.patch” ao URL, baixá-lo e aplicar o patch.

Exemplo:

 cd cordova-plugin-media wget https://github.com/apache/cordova-plugin-media/pull/120.patch patch -p1 < 120.patch 

github / hub

https://github.com/github/hub é um assistente do GitHub CLI que lida com este e outros casos de uso usando informações extras da API do GitHub. Por exemplo:

 git clone https://github.com/github/hub # Just copy paste the URL. hub checkout https://github.com/github/hub/pull/970 

Resultado:

  • agora estamos em uma ramificação chamada - que contém o PR.

    Anote o nome da boa ramificação que foi automaticamente definida para nós.

  • essa ramificação é configurada para rastrear a ramificação original na bifurcação, ou seja, .git/config contém:

     [branch "-"] remote = retronym merge = refs/heads/ticket/969 rebase = true 

    Então, se mais commits forem enviados, podemos obtê-los diretamente.

Instalar o hub no Linux é um problema se você não estiver familiarizado com o Go, mas vale a pena. No Ubuntu 14.04, o Go nos repositorys é muito antigo, então o GVM é a melhor opção:

 bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer') . "$HOME/.gvm/scripts/gvm" gvm install 'go1.4' gvm use 'go1.4' --default go get github.com/github/hub 

Eu também pedi ao GitHub para nos dar uma cópia da pasta cheats na interface do usuário da web em: https://github.com/isaacs/github/issues/449

Depois de adicionar o repository upstream como um controle remoto upstream (como @elias apontou):

 $ git remote add upstream git@github.com:Particular/NServiceBus 

Você pode configurar o git para buscar solicitações pull por padrão:

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

Então, vamos buscá-lo:

 $ git fetch upstream Fetching upstream 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/Particular/NServiceBus * [new ref] refs/pull/1/head -> upstream/pr/1 * [new ref] refs/pull/2/head -> upstream/pr/2 

E confira:

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

abaixo é para fazer o seu comando ‘git fetch’ para buscar todos os pedidos pull quando executar “git fetch”

adicione abaixo em ~ / .gitconfig

 [remote "origin"] fetch = +refs/pull-requests/*/from:refs/remotes/origin/pr/* 

note que a referência “refs / pull-requests /” tem a convenção de nomenclatura stash, para git hub, você pode precisar de um formato diferente