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 da revisão e enviá-lo novamente. Qual é o melhor fluxo de trabalho para fazer isso? Pelo meu conhecimento limitado do git / github, eu poderia fazer o seguinte:
Atualize o código como uma nova confirmação e adicione a confirmação inicial e a atualização à minha solicitação de recebimento.
De alguma forma (??) reverter o commit antigo do meu repositório e criar um único commit novo contendo tudo, e então gerar uma solicitação pull para isso?
git commit
tem um recurso de alteração, mas ouvi dizer que você não deve usá-lo depois de enviar o commit para fora do seu repositório local? Nesse caso, eu fiz a alteração no meu PC local e enviei para o ramo do github do projeto. Seria bom usar 'alterar'?Algo mais?
Parece que a opção 2/3 seria legal, pois 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: Não sei se isso afeta a resposta ou não, mas não fiz as alterações em uma ramificação separada, apenas fiz um commit em cima do master
fonte
master
é um ramo também, então tecnicamente não importa :)Para atualizar uma solicitação de recebimento
Para atualizar uma solicitação de recebimento (ponto 1), a única coisa que você precisa fazer é fazer check-out da mesma ramificação da qual o pedido de recebimento é e enviá-lo novamente:
Opcional - histórico de confirmação de limpeza
Você pode ser solicitado a juntar suas confirmações para que o histórico do repositório fique limpo ou você deseja remover as confirmações intermediárias que desviam a atenção da "mensagem" em sua solicitação de recebimento (ponto 2). Por exemplo, se o seu histórico de consolidação estiver assim:
É uma boa ideia juntar as coisas para que elas apareçam como um único commit:
Isso solicitará que você escolha como reescrever o histórico de sua solicitação de recebimento; o seguinte estará em seu editor:
Para qualquer confirmação que você queira fazer parte da confirmação anterior - altere pick para squash:
E feche seu editor. O Git reescreverá o histórico e solicitará que você forneça uma mensagem de confirmação para a confirmação combinada. Altere de acordo e seu histórico de consolidação agora será conciso:
Empurre isso para o seu garfo:
e sua solicitação de recebimento conterá uma única confirmação, incorporando todas as alterações anteriormente divididas em várias confirmações.
Mudar a história em repositórios públicos é uma coisa ruim
Reescrever o histórico e usar
git push -f
em um ramo que, potencialmente, alguém já tenha clonado é uma coisa ruim - faz com que o histórico do repositório e o do checkout divergam.No entanto, alterar o histórico do seu fork para corrigir a alteração que você propõe integrar em um repositório - é uma coisa boa. Como tal, não há reservas esmagando o "ruído" dos seus pedidos de recepção.
Uma nota sobre ramos
No exemplo acima, mostro a solicitação pull como originária da
master
ramificação do seu fork, não há nada de errado nisso, mas ela cria certas limitações, como, se essa é sua técnica padrão, apenas poder ter um PR aberto por repositório . É uma idéia melhor criar uma ramificação para cada alteração individual que você deseja propor:fonte
git push -f
. Não houve muitos comentários, mas isso é algo que eu não esperava.prune
o IF não remover esse commit desanexado, seu histórico ainda corresponderá aos comentários do PR.