Git Cherry Pick: o que é e quando usar
git cherry-pick é um comando poderoso que permite coletar commits arbitrários do Git como referência e anexar ao HEAD de trabalho atual. “Cherry picking” é o ato de escolher um commit de um branch e aplicá-lo em outro. git cherry-pick pode ser usado para desfazer alterações. Por exemplo, suponha que o commit foi um commit acidental para o branch errado. Você pode mudar para a ramificação correta e optar por se comprometer com onde ela deveria pertencer.
Quando usar o git cherry pick
Git cherry-pick é uma ferramenta útil, mas nem sempre a melhor prática. O Cherry Picks pode levar a confirmações duplicadas e, em muitos cenários em que o Cherry Picks pode funcionar, as mesclagens tradicionais são preferidas. Mesmo assim, git cherry-pick é uma ferramenta útil para alguns cenários…
Qual o objetivo do comando git cherry pick?
Imagine uma situação em que você trabalha na ramificação de registro do administrador e seus colegas trabalham em outra ramificação relacionada ao registro do usuário.
Nesse trabalho, seu parceiro acabará encontrando um problema que o está incomodando e o resolverá, mas sua tarefa ainda está em andamento.
Então você não pode mesclá-lo, mas você precisa corrigi-lo.
Cherry picking para nos ajudar com isso! Se a tarefa ainda estiver em andamento, ela pode fazer um commit e copiá-la de um branch para outro.
Mas não é só dar um merge?
Se você usar PRs, podemos ter alguns problemas ao mesclar código que não foi finalizado ou modificado.
Você pode tentar rebase ou mesclar seus colegas para corrigir a ramificação errada, mas podem surgir conflitos.
Em outras palavras, você está trazendo código desnecessário para sua ramificação que pode estar com bugs ou não testado.
Como funciona o git cherry pick
Trouxe um vídeo onde explico o conceito do git cherry pick de uma forma mais intuitiva e mostro como funciona na prática, confira abaixo:
Portanto, todos os commits têm um ID, como “f13bd3c…”. Você precisa obter esse identificador do branch do seu colega para copiá-lo para o seu branch.
Os passos são muito simples, primeiro vá para a filial do seu colega
git checkout “nome da filial do seu amigo”
Encontre o ID do commit dele, que você pode fazer com o git log.
Só para ilustrar, vou usar esse ID para facilitar a explicação: “f13bd3c3531f26e805c606729857f39987a2420f”
volte para sua filial e entre
git cherry pick f13bd3c3531f26e805c606729857f39987a2420f
prepare-se! Dessa forma, você só copia os commits que precisa e não perde tempo. É por isso que é importante sempre usar commits pequenos.
Imagine se seu colega acabasse de criar um commit com todo o conteúdo de um dia de trabalho, teríamos um grande problema.
Obtendo um intervalo de commit
No exemplo anterior, mostrei como copiar um commit de um branch para outro, mas você pode usar uma série de commits.
Nesse sentido, seus colegas, como eu, gostam muito de criar pequenos commits. Para corrigir seu problema, você deve duplicar o commit dez vezes.
Para resolver isso, o cherry pick permite que você insira um ID de confirmação inicial e um ID de confirmação final, que chamarei de A e B aqui.
Então, quando falamos de ranges, você tem duas opções:
Copie todos os commits, incluindo o primeiro
git cherry pick A^..B
Ou ignore o primeiro commit:
git cherry-pick A..B
É importante observar que o commit A deve vir após o commit B, ou seja, mais antigo na linha do tempo.
Conflitos no git cherry pick
Assim como em merges e rebases, podem ocorrer conflitos de cherry-picking, e você os resolverá da mesma forma que merge/rebase.
Você pode resolvê-los usando a interface gráfica ou através do terminal.
No terminal temos dois comandos: continue é o que você executa após resolver conflitos no seu código.
git cherry-pick — continua
Temos suspensão, colheita de cereja cancelada.
git cherry-pick –abort
parâmetro
Em resumo, estes são os comandos mais comuns que podem ajudá-lo:
-e : Permite editar a mensagem de confirmação.
-x: Adiciona uma mensagem ao commit copiado avisando que ele foi selecionado a partir de outro commit – “cerry-picked from commit”.
–allow-empty: Por padrão, o cherry-pick não permite commits vazios, usar este parâmetro substitui esse comportamento.
–allow-empty-message: Quando um commit não tem cabeçalho, é proibido. Como no exemplo anterior, esse parâmetro substitui o comportamento.
Cuidado
git cherry-pick é um comando muito útil quando bem usado, mas não é um substituto para git merge e git rebase. Todo mundo tem o seu melhor ajuste, mas esse é o tema do próximo artigo.
Use apenas o cherry-pick como último recurso, tome cuidado para não duplicar commits na timeline, use com cautela!
O que você acha do conteúdo? Você já conhece o comando git cherry pick? Você usou no seu projeto? Deixe um comentário com sua experiência!