send - how to open a pull request on github



Fluxo de trabalho preferido do Github para atualizar uma solicitação pull após a revisão de código (2)

Para atualizar uma solicitação de recebimento

Para atualizar uma solicitação pull (ponto # 1), a única coisa que você precisa fazer é fazer o checkout na mesma ramificação da qual a solicitação de pull é enviada e pressioná-la novamente:

cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push

Opcional - Limpando histórico de confirmações

Você pode ser solicitado a esmagar seus commits juntos para que o histórico do repositório esteja limpo, ou você mesmo deseja remover commits intermediários que distraem da "mensagem" na sua solicitação pull (ponto # 2). Por exemplo, se o seu histórico de commits se parece com isto:

$ git remote add parent [email protected]:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem

É uma boa ideia esmagar as coisas para que elas apareçam como um único commit:

$ git rebase -i parent/master 

Isso solicitará que você escolha como reescrever o histórico de sua solicitação de recebimento, o seguinte estará em seu editor:

pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments

Para qualquer commit você quer fazer parte do commit anterior - change pick to squash:

pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments

E feche seu editor. O Git irá então reescrever o histórico e solicitar que você forneça uma mensagem de commit para o commit combinado. Alterar em conformidade e seu histórico de commits agora será conciso:

$ git log --oneline parent/master..master
9de3202 fixing actual problem

Empurre isso para o seu garfo:

$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To [email protected]:me/my-fork.git
   f1238d0..9de3202  HEAD -> master

e sua solicitação pull conterá um único commit, incorporando todas as mudanças previamente divididas em vários commits.

Mudar o histórico em repos públicos é uma coisa ruim

Reescrevendo o histórico e usando o git push -f em um branch que, potencialmente, alguém já clonou é uma coisa ruim - faz com que o histórico do repositório e o do checkout divergam.

No entanto, alterar o histórico de sua bifurcação para corrigir a alteração que você está propondo a ser integrada em um repositório - é uma coisa boa. Como tal, não tem reservas esmagando "ruído" de seus pedidos de puxar.

Uma nota em filiais

Acima eu mostro o pedido puxado como tendo vindo do ramo master do seu garfo, não há nada de errado com isso necessariamente, mas ele cria certas limitações como, se esta é a sua técnica padrão, apenas sendo capaz de ter um PR aberto por repositório. É uma ideia melhor criar uma ramificação para cada alteração individual que você deseja propor:

$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets

Enviei uma alteração para um projeto de código aberto no Github e recebi comentários de revisão de código de um dos membros principais da equipe.

Gostaria de atualizar o código levando em consideração os comentários de revisão e reenvie-o. Qual é o melhor fluxo de trabalho para fazer isso? De meu conhecimento limitado de git / github, eu poderia fazer o seguinte:

  1. Atualize o código como uma nova confirmação e inclua a confirmação inicial e atualizada na solicitação pull.

  2. De alguma forma (??) reverter o commit antigo do meu repositório, e criar um novo commit contendo tudo, então crie um pull request para isso?

  3. git commit tem um recurso de alteração, mas ouvi dizer que você não deve usá-lo depois de ter enviado o commit para fora do seu repositório local? Neste caso eu fiz a mudança no meu PC local e fui para o meu ramo github do projeto. Isso seria OK para usar 'emendar'?

  4. Algo mais?

Parece que a opção 2/3 seria legal, já que o projeto de código aberto teria apenas um commit em sua história que implementaria tudo, mas não tenho certeza de como fazer isso.

Nota: Eu não sei se isso afeta a resposta ou não, mas eu não fiz as alterações em um ramo separado, eu apenas fiz um commit no topo do master


Answer #1

Basta adicionar um novo commit ao branch usado na solicitação pull e empurrar o branch para o GitHub. A solicitação pull será atualizada automaticamente com o commit adicional.

# 2 e # 3 são desnecessários. Se as pessoas quiserem ver apenas onde sua ramificação foi mesclada (e não as confirmações adicionais), elas poderão usar o git log --first-parent para visualizar apenas a consolidação de mesclagem no log.





pull-request