Como atualizar uma solicitação pull do repositório bifurcado?

592

Então, primeiro eu peguei um repositório e fiz um compromisso com esse repositório. Abri uma solicitação de recebimento. A solicitação de recebimento listou todas as alterações que eu queria.

Depois de analisar minha solicitação de recebimento, houve várias alterações que o proprietário do repositório queria que eu fizesse antes de aceitá-la. Fiz essas alterações no meu fork, agora como atualizo a solicitação pull com essas alterações (ou não é assim que devo lidar com isso)?

stevebot
fonte
7
@PaulDraper Eu discordo, esse usuário já conhece e apresenta vários métodos para atualizar uma solicitação pull e pergunta qual é o melhor. Eu, por outro lado, não conhecia nenhum método e estava perguntando sobre sua existência. Como mostra a popularidade desta pergunta, este é o caso de muitos outros usuários.
8114 stevebot
6
Acho que a popularidade se deve ao fato de que (1) essa é uma pergunta muito boa e comum e (2) alguns usuários acabam aqui em vez de lá. Se tivesse sido originalmente identificado como duplicado, eles teriam encontrado a outra pergunta como sendo a mesma e responderiam a ela.
Paul Draper

Respostas:

585

Você fez isso corretamente. A solicitação de recebimento será atualizada automaticamente. O processo é:

  1. Solicitação de recepção aberta
  2. Confirme as alterações com base nos comentários do seu repositório local
  3. Empurre para o ramo relevante do seu garfo

A solicitação de recebimento adicionará automaticamente as novas confirmações na parte inferior da discussão da solicitação de recebimento (ou seja, já está lá, role para baixo! )

shelhamer
fonte
73
agradável! Eu estava verificando todos os lugares, exceto a solicitação de recebimento real. é magia, magia negra, não vou questionar.
SteveBot
57
Esta é uma boa razão para trabalhar em filiais. Se, por exemplo, você sempre empurrou para o mestre, pode adicionar sem querer à sua solicitação de recebimento anterior.
Brian Pan
3
Isso não parece mais ser o caso, mesmo que fosse no passado. Aqui está um exemplo de solicitação de recebimento que eu fiz ( github.com/toopay/bootstrap-markdown/pull/167 ) em comparação com o próprio ramo ( github.com/mhuggins/bootstrap-markdown/commits/… ). Curioso para fazer isso mais, pois o processo parece ter mudado.
Matt Huggins
1
O GitHub realmente diz a você: "Adicione mais confirmações pressionando a ramificação SolveWorldHunger no ChangeTheWorldProject."
flow2k
1
O mesmo aqui - não vejo alterações no repositório bifurcado no repositório principal. Parece um bug do GitHub
andrfas
78

Atualizar uma solicitação pull no GitHub é tão fácil quanto confirmar as alterações desejadas na ramificação existente (que foi usada com solicitação pull), mas geralmente também é necessário compactar as alterações em uma confirmação única:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... e agora a solicitação de recebimento contém apenas uma confirmação.


Links relacionados sobre rebasing:

jmu
fonte
2
Voto positivo por mencionar rebase. Ajuda a eliminar o ruído no histórico de revisões.
SteveBot
. +11 (sim i destinado a rrrrepeating chave Usando git rebase / pick / squash está trabalhando muito.
javadba
11
A desvantagem dessa abordagem é que você está removendo seu commit anterior. Isso significa que, se forem feitos comentários na solicitação de recebimento, eles serão perdidos e desaparecerão junto com o commit original.
blowekamp
No Bitbucket, você pode ver comentários sobre "versões anteriores" de um arquivo em uma solicitação pull. Embora seja bom ver algo como no Gerrit, onde você conserta os patches e pode ver o histórico inteiro com comentários. Isso cria um histórico e rastreabilidade simples do git quando você pode voltar e ver a discussão completa sobre qualquer commit.
Amor
36

Basta enviar para a ramificação à qual a solicitação pull faz referência. Enquanto a solicitação de recebimento ainda estiver aberta, ela deve ser atualizada com qualquer confirmação adicionada automaticamente.

igorw
fonte
14

Eu fiz isso usando as etapas abaixo:

  1. git reset --hard <commit key of the pull request>
  2. Minhas alterações no código que eu queria fazer
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>
Vikasdeep Singh
fonte
1
Muito bom, prefiro essa abordagem! O GitHub até oculta (mas mantém) as seções desatualizadas do código e os comentários associados. É bom lembrar que, se a solicitação de recebimento contiver várias confirmações e a que requer correção não estiver na ponta do ramo, "git reset --hard" descartará todas as alterações confirmadas após o ID especificado. Eu tinha um backup que apliquei manualmente. Não é muito conveniente se houver mais de um commit extra ...
Nagev 29/03
3

Se você estiver usando o GitHub no Windows :

  1. Faça alterações localmente.
  2. Abra o GitHub, alterne para repositórios locais, clique duas vezes no repositório.
  3. Alterne a ramificação (próxima à parte superior da janela) para a ramificação da qual você criou a solicitação pull (ou seja, a ramificação no lado da bifurcação da comparação)
  4. Você deve ver a opção de inserir um comentário de confirmação à direita e confirmar as alterações no seu repositório local.
  5. Clique em sincronizar na parte superior, que, entre outras coisas, envia seu commit do local para o fork remoto no GitHub.
  6. A solicitação de recebimento será atualizada automaticamente com as confirmações adicionais. Isso ocorre porque a solicitação puxada representa um diff com a ramificação do seu fork. Se você for para a página de solicitação de recebimento (aquela em que você e outras pessoas podem comentar sobre sua solicitação de recebimento), a guia Confirmações deverá ter seus envios adicionais.

É por isso que, antes de começar a fazer suas próprias alterações, você deve criar uma ramificação para cada conjunto de alterações que planeja colocar em uma solicitação de recebimento. Dessa forma, depois de fazer a solicitação pull, você poderá fazer outra ramificação e continuar trabalhando em alguma outra tarefa / recurso / correção de bug sem afetar a solicitação pull anterior.

AaronLS
fonte