Recentemente, fui convidado para cherry-pick
um commit.
Então, o que significa escolher um commit no git? Como você faz isso?
git
cherry-pick
git-cherry-pick
Rahul
fonte
fonte
Respostas:
A escolha de cereja no Git significa escolher um commit de um ramo e aplicá-lo em outro.
Isso contrasta com outras formas como
merge
erebase
que normalmente aplicam muitos commits em outro ramo.Verifique se você está no ramo ao qual deseja aplicar o commit.
Execute o seguinte:
NB:
Se você escolher um ramo público, considere usar
Isso irá gerar uma mensagem de confirmação padronizada. Dessa forma, você (e seus colegas de trabalho) ainda podem acompanhar a origem da confirmação e evitar conflitos de mesclagem no futuro.
Se você tiver notas anexadas ao commit, elas não seguirão a opção de escolha. Para trazê-los também, você deve usar:
Links adicionais:
fonte
git cherry-pick -x <commit-hash>
. Isso irá gerar uma mensagem de confirmação padronizada. Dessa forma, você (e seus colegas de trabalho) ainda podem acompanhar a origem da confirmação e evitar conflitos de mesclagem no futuro.git notes copy <from> <to>
para trazê-los também."cherry-pick commit applies the changes introduced by the named commit on the current branch"
maioria As pessoas tendem a pensar no commit como mudanças (como svn was iirc), mas não é, cada commit refere-se à árvore de trabalho completa. Embora isso não faça diferença neste caso, ele pode ajudar a entender por que o git funciona como ele.Esta citação é retirada de; Controle de versão com Git (livro realmente bom, recomendo que você o compre se estiver interessado em git)
Edit: Como esta resposta ainda está sendo impressa, eu gostaria de adicionar um tutorial em vídeo muito bom sobre a ação:
Youtube: Introdução ao Git cherry-pick
antes:
depois de:
fonte
A escolha da cereja no Git foi projetada para aplicar alguns commit de um ramo em outro. Isso pode ser feito se você, por exemplo. cometeu um erro e cometeu uma alteração no ramo errado, mas não deseja mesclar o ramo inteiro. Você pode apenas por exemplo. reverta o commit e escolha-o em outro ramo.
Para usá-lo, você só precisa
git cherry-pick hash
, ondehash
está um hash de consolidação de outro ramo.Para obter o procedimento completo, consulte: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
fonte
Pequeno exemplo de situação, quando você precisa escolher uma cereja
AGORA : Você corrige algo no release1 . Claro que você precisa dessa correção também no master . E esse é um caso de uso típico para a colheita de cerejas. Portanto, a escolha de cereja nesse cenário significa que você aceita um commit do branch release1 e o inclui no diretório ramo mestre .
fonte
cherry-pick é um recurso do Git. Se alguém desejar confirmar confirmações específicas em uma ramificação em uma ramificação de destino, será usada a seleção de cereja.
As etapas git cherry-pick são as seguintes.
Aqui, o commit id é o ID da atividade de outro branch.Eg.
Visite https://git-scm.com/docs/git-cherry-pick
fonte
Eu preparei ilustrações passo a passo o que o cherry-pick faz - e uma animação dessas ilustrações (perto do fim).
(vamos fazer uma escolha cereja do commit a
L
partir da ramificaçãofeature
):git cherry-pick feature~2
(
feature~2
é o 2º commit antesfeature
, ou seja, o commitL
):git cherry-pick feature~2
):O mesmo animado:
Nota:
A confirmação
L'
é do ponto de vista do usuário (confirmação = captura instantânea) a cópia exata da confirmaçãoL
.Tecnicamente (internamente), é um commit novo e diferente (porque, por exemplo,
L
contém um ponteiro paraK
(como pai), enquantoL'
contém um ponteiro paraE
).fonte
Você pode pensar se uma escolha de cereja é semelhante a uma rebase, ou melhor, é gerenciada como uma rebase. Com isso, quero dizer que ele pega um commit existente e o regenera, assumindo, como ponto de partida, o chefe do branch em que você está atualmente.
A
rebase
pega uma confirmação que tinha um pai X e regenera a confirmação como se realmente tivesse um pai Y, e é exatamente isso que acherry-pick
faz.A escolha da cereja é mais sobre como você seleciona os commits. Com
pull
(rebase), o git regenera implicitamente seus commits locais, além do que é puxado para sua ramificação, mas comcherry-pick
você escolhe explicitamente alguns commit (s) e os regenera implicitamente (eles) sobre seu branch atual.Portanto, a maneira como você faz isso é diferente, mas sob o capô são operações muito semelhantes - a regeneração de confirmações.
fonte
cherry-pick
se comporta da mesma maneira quando o ramo de destino é posteriormente mesclado de volta ao ramo de origem. Obrigado senhor.É como copiar (de algum lugar) e colar (para algum lugar), mas para confirmações específicas.
Se você deseja fazer uma correção, por exemplo, pode usar o
cherry-pick
recurso.Faça isso
cherry-pick
em um ramo de desenvolvimento emerge
que se comprometa com um ramo de lançamento. Da mesma forma, faça acherry-pick
partir de uma ramificação de liberação para dominar. Voilafonte
Quando você está trabalhando com uma equipe de desenvolvedores em um projeto, gerenciar as alterações entre vários ramos git pode se tornar uma tarefa complexa. Às vezes, você não deseja mesclar uma ramificação inteira em outra e precisa escolher apenas uma ou duas confirmações específicas. Esse processo é chamado de 'colheita da cereja'.
Encontrei um ótimo artigo sobre a escolha da cereja, confira detalhes detalhados: https://www.previousnext.com.au/blog/intro-cherry-picking-git
fonte
Se você deseja mesclar sem confirmar os IDs, pode usar este comando
O comando acima mesclará os últimos três commits do master de 1 a 3
Se você quiser fazer isso para o commit único, remova a última opção
Dessa forma, você mesclará a terceira confirmação a partir do final do mestre.
fonte
Ele aplicará uma confirmação específica à sua ramificação atual.
Isso significa :
Ex: considere comprometer A
comprometer B
Se você escolher o commit B em outro ramo, você terminará com:
como o commit B contém newFileB e main , mas nenhum newFileA , resultando em um bug, portanto, use com cuidado.
fonte
Trecho dos documentos oficiais:
Consulte Mais informação...
fonte