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
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
commit 0b90d263bd15107c09955d735e8a671f537b4e4e
Author: João Oliveira
Date: Wed Jun 8 12:11:46 2022 -0300
Substituição de EmailHelper por MailKitHelper
Obtem-se o código mais recente de todas as branches
git fetch --all
Cria-se uma nova branch baseada na master
.
git checkout -b branch_joao_nova master
Aplica-se a alteração desejada na branch. No meu caso, seria o id abaixo.
git cherry-pick 0b90d263bd15107c09955d735e8a671f537b4e4e
Executa-se o push
com as alterações para a branch remota.
git push -u origin branch_joao_nova
Para exemplificar, as branches ficaram assim. Suprimi homolog e branch_outro_dev para facilitar a leitura.
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)