Como fazer uma solicitação pull do GitHub

283

Como crio e / ou envio uma solicitação pull para outro repositório hospedado no GitHub?

Tim Peterson
fonte
2
Isso não é suficientemente explicado nas páginas de ajuda do GitHub ?
lanzz
27
@lanzz Não, a página de ajuda não inclui algumas dicas úteis que eu gostaria de saber antes de fazer minhas primeiras solicitações de recebimento (veja abaixo).
VonC
9
@ianzz, é claro, a página do Github é "suficiente", mas há muitas maneiras de aprender. O que me esforcei para fazer foi criar um tutorial para iniciantes. O que eu achei ausente na explicação do Github foi que: 1) não estava contido em uma fonte (duas páginas que não estão claramente vinculadas), 2) não foi sucinto (essas páginas são muito longas, longas = esmagadoras), 3) foi não explicado em termos humanos nas seções principais. No ensino, é sempre difícil para um professor mais experiente saber o que um iniciante não sabe. Colocar-me no lugar do iniciante era meu objetivo ao escrever isso.
tim Peterson
12
Longo pode significar avassalador, o que pode significar abortar = sem aprendizado. Pode-se "acabar entendendo o processo envolvido" por várias vias que obviamente não seriam uma delas. Para encerrar a guerra de chamas, não há necessidade de responder, eu entendo de onde você vem.
tim Peterson
8
Você faz uma solicitação pull de seu próprio fork. Definitivamente, essa não era minha suposição original.
Derek Illchuk

Respostas:

236

(Além da página oficial " Ajuda do GitHub 'Usando solicitações de recebimento' ",
consulte também " Bifurcação versus ramificação no GitHub ", " Qual é a diferença entre origem e upstream no GitHub ")

Algumas dicas sobre solicitações de recebimento:

Supondo que você tenha adquirido um repositório pela primeira vez , eis o que você deve fazer no garfo que possui:

  • criar um ramo : isole suas modificações em um ramo. Não crie uma solicitação pull master, de onde você pode ficar tentado a acumular e misturar várias modificações ao mesmo tempo.
  • rebase dessa ramificação : mesmo que você já tenha feito uma solicitação pull dessa ramificação, refazê-la novamente origin/master(certificando-se de que seu patch ainda esteja funcionando) atualizará a solicitação pull automaticamente, automaticamente (não é necessário clicar em nada)
  • atualize essa ramificação : se sua solicitação de recebimento for rejeitada, você simplesmente poderá adicionar novas confirmações e / ou refazer completamente seu histórico: ele ativará sua solicitação de recebimento existente novamente.
  • "concentre" esse ramo : ou seja, torne seu tópico "restrito", não modifique milhares de classes e todo o aplicativo, adicione ou corrija apenas um recurso bem definido, mantendo as alterações pequenas .
  • excluir esse ramo : uma vez aceito, você pode excluir com segurança esse ramo no garfo (e git remote prune origin). A GUI do GitHub proporá que você exclua seu ramo na sua página de solicitação de recebimento.

Nota: para escrever a solicitação pull, consulte " Como escrever a solicitação pull perfeita " (janeiro de 2015, GitHub)


Março de 2016: nova opção de botão de mesclagem de relações públicas: consulte " Squash do Github confirmado na interface da web na solicitação de solicitação após comentários de revisão? ".

abóbora

O mantenedor do repositório pode escolher para merge --squashaqueles comprometimentos de relações públicas.


Após uma solicitação de recebimento

Em relação ao último ponto, desde 10 de abril de 2013, " botão de mesclagem reprojetado ", a ramificação é excluída para você:

novo botão de mesclagem

A exclusão de ramificações após a mesclagem também foi simplificada.
Em vez de confirmar a exclusão com uma etapa extra, removemos imediatamente a ramificação quando você a exclui e fornecemos um link conveniente para restaurar a ramificação no caso de você precisar novamente .

Isso confirma a melhor prática de excluir a ramificação após mesclar uma solicitação de recebimento.


solicitação de extração vs. solicitação de extração


notas eletrônicas para "repositório" (sic)

<humour>

Essa (solicitação de recebimento) nem é definida corretamente pelo GitHub!

Felizmente, uma verdadeira organização de notícias de negócios saberia e existe uma nota eletrônica para substituir pull-replace por 'e-note' :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Portanto, se seus repos O tory precisa de um e-nota ... pedir Fox Business . Eles estão no saber.

</humour>

VonC
fonte
2
- @ VonC obrigado por isso. Você se importaria em fornecer algum código para mostrar como o que você disse difere do que eu disse? A decisão branchvs. masterparece crítica para levar a resposta do meu / Github de uma solução teórica para algo que realmente se usaria.
tim Peterson
1
@timpeterson O fato de poder alterar completamente o histórico dentro desse ramo e de atualizar automaticamente a solicitação de recebimento é fundamental aqui: porque uma solicitação de recebimento deve ser feita no último projeto do upstream. Se esse repositório upstream tiver novas confirmações, você deverá refazer sua ramificação por cima (alterando o histórico dessa ramificação) e enviá-lo de volta ao seu fork: isso atualizará sua solicitação de recebimento (com base na mesma ramificação) automaticamente.
VonC
4
Não estou entendendo a parte do rebasamento. O que isso faz? ( esta página faz parecer ciência de foguetes, mas acredito que não). Que comando você daria naquele ponto que "se rebase"?
Camilo Martin
1
@CamiloMartin se você estiver no seu ramo de relações públicas, então a git pull --rebase upstream/masterestá bem.
VonC 02/08/19
1
O @vikramvi master é um ramo em comum com o repositório original que você bifurcou. Esse ramo deve sempre espelhar o repositório original. Você isola suas correções em uma ramificação para o seu PR. Você usa mestre apenas como uma maneira de saber o que está no repo original (e para realocar o seu ramo de correção em cima dela, para assegurar uma fusão pull-pedido fácil)
VonC
202

Para aprender a fazer uma solicitação pull, apenas segui duas páginas de ajuda separadas no Github (link abaixo como pontos de marcador). Os seguintes comandos de linha de comando são para a Parte 1 . A Parte 2 , a solicitação de recebimento real, é feita inteiramente no site do Github.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Parte 1 : forçar o repo de alguém: https://help.github.com/articles/fork-a-repo

    1. clique no botão 'fork' no repositório em que você deseja contribuir, neste caso: repositório PHP do Dwolla (Dwolla / dwolla-php)
    2. obtenha o URL do seu fork recém-criado, neste caso: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. digite a git clone->cd dwolla-php->git remote->git fetchsequência acima para clonar seu fork em algum lugar do seu computador (por exemplo, "copie / cole" para, neste caso third_party TimPeterson$:) e sincronize-o com o repositório principal (Dwolla / dwolla-php)
    4. faça as alterações no seu repositório local
    5. digite a git add->git commit->git pushsequência acima para enviar suas alterações ao repositório remoto, ou seja, seu fork no Github (tim-peterson / dwolla-php)
  • Parte 2 : faça solicitação de recepção: https://help.github.com/articles/using-pull-requests

    1. acesse a página do seu fork no Github ( https://github.com/tim-peterson/dwolla-php )
    2. clique no botão "pull-request"
    3. dê um nome à solicitação de recebimento, preencha os detalhes de quais alterações você fez, clique no botão Enviar.
    4. Você Terminou!!
tim peterson
fonte
4
- @ alexgray, deixei os avisos do bash, por exemplo, Tims-MacBook-Pro:third_party TimPeterson$porque este é um tutorial para iniciantes e esses avisos ajudam a orientar o usuário.
tim Peterson
1
Sim. Obrigado. Um exemplo de trabalho que posso seguir. Por que você não tem esse hub git?
Sevenearths
Depois git fetch upstream, você não precisa mesclar as alterações upstream com sua cópia local, usando git checkout masterentão git merge upstream/master?
Sparhawk 17/05
@ Sparhawk Não, você não precisa mesclar suas alterações no mestre que reside no seu garfo. A solicitação de recebimento para o outro repo pode ser baseada apenas fora da ramificação. No entanto, geralmente é uma boa prática para você também atualizar o mestre do seu fork, à medida que avança, para que mude para o repositório "real" e seja frequentemente trazido de volta ao loop em seu repositório bifurcado.
Ely
1
@HimanshuShekhar sim, mas você precisa usar o aplicativo de desktop do github ou sua API. O navegador é mais fácil para mim.
tim Peterson
70

Para fazer uma solicitação de recebimento, você precisa executar as seguintes etapas:

  1. Bifurcar um repositório (para o qual você deseja fazer uma solicitação pull). Basta clicar no botão de bifurcação na página do repositório e você terá um repositório separado do github precedido pelo seu nome de usuário do github.
  2. Clone o repositório na sua máquina local. O software Github que você instalou na sua máquina local pode fazer isso por você. Clique no botão clone ao lado do nome do repositório.
  3. Faça alterações / confirmações locais nos arquivos
  4. sincronizar as alterações
  5. vá para o seu repositório bifurcado do github e clique no botão verde "Comparar e revisar" ao lado do botão de ramificação. (O botão tem ícone - sem texto)
  6. Uma nova página será aberta mostrando suas alterações e, em seguida, clique no link de solicitação de recebimento, que enviará a solicitação ao proprietário original do repositório que você bifurcou.

Levei um tempo para entender isso, espero que isso ajude alguém.

Farhan
fonte
3
Não estava claro para mim que você precisava fazer um repo antes de poder fazer uma solicitação de recebimento. Imaginei que um commit enviado iria apenas para algum tipo de ramificação pendente que tenha acesso público de gravação e, a partir daí, seria mesclado. Obrigado!
Chris Arena
16

Comecei um projeto para ajudar as pessoas a fazer sua primeira solicitação de recebimento do GitHub. Você pode fazer o tutorial prático para fazer seu primeiro PR aqui

O fluxo de trabalho é simples como

  • Bifurque o repositório no github
  • Obtenha o URL do clone clicando no botão repo do clone
  • Vá para o terminal e corra git clone <clone url you copied earlier>
  • Faça uma ramificação para as alterações que você está fazendo git checkout -b branch-name
  • Faça as alterações necessárias
  • Confirme suas alterações git commit
  • Envie suas alterações para o seu fork no GitHub git push origin branch-name
  • Vá para o seu fork no GitHub para ver um Compare and pull requestbotão
  • Clique nele e forneça os detalhes necessários
sudo bangbang
fonte
15

Para aqueles que possuem uma conta no github.com, mas só recebem uma mensagem de erro desagradável quando digitam "git" na linha de comando, veja como fazer tudo isso no navegador :)

  1. O mesmo que Tim e Farhan escreveram: bifurque sua própria cópia do projeto: Etapa 1: garfo
  2. Após alguns segundos, você será redirecionado para sua própria cópia bifurcada do projeto: Passo 2
  3. Navegue para os arquivos que você precisa alterar e clique em "Editar este arquivo" na barra de ferramentas: Etapa 3: editar um arquivo
  4. Após a edição, escreva algumas palavras descrevendo as alterações e, em seguida, "Confirme as alterações", assim como no ramo mestre (já que essa é apenas sua própria cópia e não o projeto "principal"). Etapa 4: confirmar alterações
  5. Repita as etapas 3 e 4 para todos os arquivos que você precisa editar e, em seguida, volte para a raiz da sua cópia do projeto. Lá, clique no botão verde "Comparar, revisar ...": Etapa 5: iniciar o envio
  6. Por fim, clique em "Criar solicitação pull" ..e depois em "Criar solicitação pull" novamente depois de verificar duas vezes o cabeçalho e a descrição da solicitação: insira a descrição da imagem aqui
Sphinxxx
fonte
3

Segui as instruções de tim peterson, mas criei uma filial local para minhas alterações. No entanto, depois de pressionar, eu não estava vendo a nova ramificação no GitHub. A solução foi adicionar -u ao comando push:

git push -u origin <branch>
Tamalet
fonte
você notou os dois nomes de usuário nos URLs acima? o primeiro é tim-petersono 2º éDwolla
tim peterson 15/06
3
Além disso, isso é melhor como um comentário para a minha resposta. Você pode receber alguns votos negativos.
tim Peterson
1

Eu escrevi um programa bash que faz todo o trabalho de configurar uma filial de relações públicas para você. Ele realiza bifurcação, se necessário, sincronizando com o upstream, configurando o upstream remoto, etc. e você só precisa confirmar suas modificações, enviar e enviar um PR.

Aqui está como você o executa:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Você encontrará o programa aqui e seu repositório também inclui um guia passo a passo para executar o mesmo processo manualmente, se você quiser entender como ele funciona, e também informações adicionais sobre como manter sua ramificação de recursos atualizada. data com o mestre upstream e outros boatos úteis.

Stason
fonte
0

A solicitação de extração mais simples do GitHub é da interface da web sem usar o git.

  1. Registre uma conta no GitHub, faça o login e vá para a página no repositório que deseja alterar.
  2. Clique no ícone de lápis ,

    pesquise texto próximo ao local, faça as edições desejadas e visualize-as para confirmar. Dê à alteração proposta uma descrição com até 50 caracteres e, opcionalmente, uma descrição estendida e clique no botão Propor alteração do arquivo .

  3. Se você estiver lendo isso, não terá acesso de gravação ao repositório (pastas do projeto), portanto o GitHub criará uma cópia do repositório (na verdade uma filial) em sua conta. Clique no botão Criar solicitação de recebimento.

  4. Dê uma descrição à solicitação de solicitação e adicione comentários, depois clique no botão Criar solicitação de solicitação .
flywire
fonte