DEV Community

Cover image for Como usar o cherry-pick no GIT
João Batista Costa Oliveira
João Batista Costa Oliveira

Posted on

Como usar o cherry-pick no GIT

Olá pessoal, tudo bem?

Recentemente tive a necessidade de publicar no ambiente de produção algumas alterações, já aprovadas, que estavam em uma branch, porém outras alterações de outros desenvolvedores ainda estavam aguardando aprovação. Para ajudar a visualizar o cenário, temos as branches:

  • master
  • homolog
  • branch_joao
  • branch_outro_dev

Cenário atual das branches

Como podem perceber, a aprovação ocorre em cima da branch homolog.

Enfim, outro desenvolvedor e eu criamos Pull Requests para homolog.

Até então, somente a minha alteração foi aprovada e por conta do Pull Request do colega, eu não poderia criar a Pull Request de homolog para master, pois a alteração dele iria para produção.

Pois bem, o git tem o comando cherry-pick, que aplica alterações de acordo com commits já existentes. Ou seja, cherry picking é o ato de escolher um commit de uma branch e aplicá-la em outra.

Os comandos abaixo foram realizados no Git Bash.

Obtem-se o commit id desejado de branch_joao

git log
Enter fullscreen mode Exit fullscreen mode
commit 0b90d263bd15107c09955d735e8a671f537b4e4e
Author: João Oliveira 
Date:   Wed Jun 8 12:11:46 2022 -0300

Substituição de EmailHelper por MailKitHelper
Enter fullscreen mode Exit fullscreen mode

Obtem-se o código mais recente de todas as branches

git fetch --all     
Enter fullscreen mode Exit fullscreen mode

Cria-se uma nova branch baseada na master.

git checkout -b branch_joao_nova master      
Enter fullscreen mode Exit fullscreen mode

Aplica-se a alteração desejada na branch. No meu caso, seria o id abaixo.

git cherry-pick 0b90d263bd15107c09955d735e8a671f537b4e4e
Enter fullscreen mode Exit fullscreen mode

Executa-se o pushcom as alterações para a branch remota.

git push -u origin branch_joao_nova
Enter fullscreen mode Exit fullscreen mode

Para exemplificar, as branches ficaram assim. Suprimi homolog e branch_outro_dev para facilitar a leitura.

Nova branch e cherry pick

Depois disso, cria-se um Pull Request para a master e a situação foi contornada.

Claro, neste exemplo não foi abordado nenhum conflito entre commits ou outro tipo de situação que envolveria uma maior intervenção.

Espero ter ajudado.

Referências:
https://git-scm.com/docs/git-cherry-pick
https://www.atlassian.com/git/tutorials/cherry-pick

Top comments (0)