Eu tenho BranchA
113 que está comprometido à frente BranchB
.
Mas eu só quero que os 10 últimos commits sejam BranchA
mesclados BranchB
.
Existe uma maneira de fazer isso?
Eu tenho BranchA
113 que está comprometido à frente BranchB
.
Mas eu só quero que os 10 últimos commits sejam BranchA
mesclados BranchB
.
Existe uma maneira de fazer isso?
Respostas:
o git cherry-pick <commit>
comando permite que você faça um único commit (de qualquer ramificação) e, essencialmente, a refaça na sua ramificação de trabalho.
O capítulo 5 do livro Pro Git explica melhor do que eu , completo com diagramas e coisas do tipo. ( O capítulo Rebasing também é uma boa leitura.)
Por fim, existem alguns bons comentários sobre a escolha da cereja contra a mesclagem e o rebaseamento em outra questão SO .
A
seja ramificado master
e você faz algum trabalho nele, criando child commits B
por meio dele E
. Digamos que E
apenas 1 linha foi adicionada de D
. Se você git cherry-pick E
entrar master
, aplica todas as alterações de A
até E
a master
ramificação ou aplica apenas a alteração de D
para E
, ou seja, adiciona apenas essa 1 linha a master
? Se o caso for o primeiro, como faço para conseguir o último? (além de copiar e colar manualmente)
Se o BranchA não foi enviado para um controle remoto, você pode reordenar as confirmações usando rebase
e simplesmente merge
. É preferível usar merge
mais rebase
quando possível, porque não criar commits duplicados.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
FONTE: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
A outra maneira de mover o trabalho introduzido de um ramo para outro é selecioná-lo. Uma escolha de cereja no Git é como uma rebase para um único commit. Ele pega o patch que foi introduzido em um commit e tenta reaplicá-lo no ramo em que você está atualmente. Isso é útil se você tiver várias confirmações em uma ramificação de tópico e desejar integrar apenas uma delas, ou se tiver apenas uma confirmação em uma ramificação de tópico e preferir selecioná-la em vez de executar a rebase. Por exemplo, suponha que você tenha um projeto parecido com este:
Se você deseja inserir o commit e43a6 em sua ramificação principal, é possível executar
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Isso puxa a mesma alteração introduzida no e43a6, mas você obtém um novo valor de confirmação SHA-1, porque a data aplicada é diferente. Agora, seu histórico fica assim:
Agora você pode remover a ramificação do tópico e soltar as confirmações que não deseja obter.