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)?



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! )


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:


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.


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>

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.

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.