Git: O que é e como usar o Git Cherry Pick?

Git, é um sistema de controle de versão moderno criado por Linus Torvalds, mesmo criador do Linux Kernel. O Git é uma das ferrementas de código aberto mais utilizadas pelos programadores, sendo responsável por manter registradas quaisquer alterações a um determinado projeto. Com isso, permitindo que seja possível, comparar diferentes versões, avançar ou regredir no histórico de versões deste mesmo projeto, e muitas outras tarefas.

Se você ainda não entende muito bem o que é e como funciona o Git, mas gostaria de aprender, recomendo este artigo. Além disso, tenho alguns outros artigos, que escrevi há algum tempo aqui no blog sobre o assunto:


O que é o Git Cherry Pick, e como mover pequenos pedaços de código entre branches?

O cherry-pick é um dos comandos do git que nos permite levar partes específicas da nossa árvore de commits para uma branch desejada.

Lembrando que o cherry-pick é um comando muito útil, quando bem utilizado. Porém, ele não pode substituir o git merge e o git rebase, por exemplo. Cada um possui uma situação que se encaixa melhor. Use o cherry-pick apenas em último caso, com cuidado para não duplicar commits na sua linha do tempo, de forma desnecessária. Use com moderação!

Então vamos para o exemplo:

O exemplo mais simples que eu posso trazer para representar a ideia do cherry-pick é o de levar alterações que estão em uma branch específica para a branch de produção (main, neste caso), sem afetar outras branches pré-prod.

Grafico 1 - Exemplo prático do comando git cherry-pick. Grafico 1 - Exemplo prático do comando git cherry-pick.


Para melhor entendimento, neste exemplo temos 2 features e 1 hotfix no nosso ambiente de testing/qa, onde:

  • uma das features contém um bug (linha vermelha), e outra está aprovada (linha verde).
  • o hotfix corrige um bug em staging antes de tudo ir pra main (produção).

Considerando que já temos vários commits em staging e mais alguns em testing/qa, como podemos fazer para enviar o ajuste para staging, e então realizar o merge staging -> main, sem enviar tudo que temos de divergente na branch testing/qa? Além disso, manter o fluxo de integração, com nossa branch hotfix-1 sendo enviada para testing/qa normalmente e sem conflitos?

Bom, para resolver esse problema, podemos usar o commando cherry-pick. Ele vai nos ajudar, seguindo exatamente o que a linha azul do nosso gráfico 1 representa.

Para resolver o passo 2, podemos seguir o fluxo normalmente. Nenhuma alteração é necessária, e com isto vamos manter nossas branches sincronizadas com o contéudo do cherry-pick.

Como executar o comando git cherry-pick?

O cherry-pick, pode ser feito tanto por command line quanto por interface gráfica.

Interface Gráfica

A maioria dos gerenciadores de repositórios git (Gitlab, Github, etc) já incluem uma opção de cherry-pick por padrão em cada Pull (ou Merge) Request.

Cherry-pick localmente por linha de comando

Para realizar esta ação por linha de comando, primeiro você deve ir para a branch que você quer levar para a branch alvo e exibir o identificador do ultimo commit que você deseja integrar.

git checkout hotfix-1
git rev-parse HEAD
//=> Ex.: 851a2508b93007e145b132dae2c69a7165734a8a

Com o resultado acima, podemos realizar navegar até a nossa branch alvo e realizar o cherry-pick:

git checkout stagig
git cherry-pick 851a2508b93007e145b132dae2c69a7165734a8a

Pronto! Simples assim.

Compartilhe:
Buy Me A Coffee