Eu estava trabalhando em um ramo de recurso e fiz um git checkout -b feature/other-feature
, fez algum trabalho, comprometeu-o e, em seguida, empurrou-o para o recurso de origem / outro recurso no github.
Quando criei um pedido de pull doramificação other-feature no github Eu percebi que ele mostrava uma carga de commits do branch - commits do recurso original que deveriam ser fundidos para serem desenvolvidos a partir do branch original.
Eu acho que o que fiz de errado foi omitir git checkout develop
antes que eu fiz git checkout -b feature/other-feature
e então o que eu acho que eu quero fazer para corrigir esta situação é rebase de outros recursos para desenvolver.
Mas dado que eu empurrei meu erro para a origem e outras pessoas têm clones deste repo, eu preciso rebase ou fazer outra coisa?
Respostas:
3 para resposta № 1Sim, você precisa rebase sua cópia de feature/other-feature
. No entanto, neste caso, um simples git rebase develop
provavelmente não funcionará, porque você se ramificou de outro ramo de recursos, em vez de diretamente develop
. Você precisa usar rebase --onto
:
git rebase --onto develop feature/earlier-feature feature/other-feature
Aqui, feature/earlier-feature
é o ramo de recursos que você tinha verificado quando você morre o original
git checkout -b feature/other-feature
.
Este rebase irá:
- Tome os commits em
feature/other-feature
que são não dentrofeature/earlier-feature
. - Reaplicar esses commits para
develop
.
Você deve acabar com um ramo alterado feature/other-feature
que agora é baseado em develop
.
Notas
- Por causa da recomposição, você terá que forçar o envio de sua ramificação para o repositório do GitHub. Isso não é um problema, contanto que você tenha o único clone do seu repositório. Se você usar o repositório com outras pessoas, as coisas serão mais difíceis (veja abaixo).
- O rebase pode causar conflitos. Você terá que resolver isso manualmente.
- Leitura adicional: Os conceitos por trás da rebasing e o significado de
rebase --onto
são bem explicados no livro "Pro Git". Veja o capítulo 3.6, Git Branching - Rebasing.
Se outros clonaram seu repositório
Você escreve
Mas dado que eu tenho empurrado o meu erro para a origem e outras pessoas têm clones deste repo, eu preciso rebase ou fazer outra coisa?
Você ainda pode rebase conforme descrito acima. No entanto, você não deve forçar o envio da ramificação rebased com o nome antigo. Em vez disso, crie uma cópia do ramo:
git checkout -b feature/other-feature-2 feature/other-feature
Isto irá criar um novo ramo feature/other-feature-2
essa é uma cópia exata feature/other-feature
. Você pode então rebase o novo ramo, e empurrá-lo com o novo nome. Então diga a todos que feature/other-feature
foi substituído por feature/other-feature-2
e excluir feature/other-feature
no GitHub. Ter que dizer a todos é o preço que você paga para rebasing :-).