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.
Pergunta: digamos que commit Aseja ramificado mastere você faz algum trabalho nele, criando child commits Bpor meio dele E. Digamos que Eapenas 1 linha foi adicionada de D. Se você git cherry-pick Eentrar master, aplica todas as alterações de Aaté Ea masterramificação ou aplica apenas a alteração de Dpara 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)
chharvey
7
git cherry-pick -n <commit> Se você não deseja que a escolha da cereja seja confirmada automaticamente.
Ben Flynn
6
Se o BranchA não foi enviado para um controle remoto, você pode reordenar as confirmações usando rebasee simplesmente merge. É preferível usar mergemais rebasequando 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]
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.
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 .
fonte
A
seja ramificadomaster
e você faz algum trabalho nele, criando child commitsB
por meio deleE
. Digamos queE
apenas 1 linha foi adicionada deD
. Se vocêgit cherry-pick E
entrarmaster
, aplica todas as alterações deA
atéE
amaster
ramificação ou aplica apenas a alteração deD
paraE
, ou seja, adiciona apenas essa 1 linha amaster
? 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 simplesmentemerge
. É preferível usarmerge
maisrebase
quando possível, porque não criar commits duplicados.fonte
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
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.
fonte