Cherry pick
- 24/09/2022
- 3 min
Git
Github
As vezes precisamos pegar um commit individual que se encontra em uma outra branch, com alguma feature ou correção que aconteceu em paralelo, o Cherry pick faz exatamente isso, ele junta dois commits em uma linha do tempo, evitando de repente de realizar um Merge.
Cherry pick
Em alguns momentos nos vemos em uma situação onde estamos desenvolvendo em uma branch(chamaremos de Branch X), porém existe outro integrante do time que está trabalhando em uma task em outra branch (chamaremos de Branch Y), as duas estão sendo desenvolvidas juntas. O dev da branch Y encontrou e corrigiu um bug que impacta diretamente na task da branch X.
Ao invés de ter que realizar um commit e fazer um merge ou qualquer outra gambiarra (Não precisa mandar o código pelo privado) pode ser feito um commit da correção e o dev da branch X usa o Cherry pick para pegar apenas a correção e trazer para a sua linha do tempo.
Lembrando que o cherry pick não é bala de prata, as vezes realmente é melhor fazer um merge.
Cherry pick na prática
Antes de irmos para o Bash, é interessante esclarecer que é necessário ter duas branchs e pelo menos um commit na branch que você vai pegar o commit.
Vamos começar bem do início, precisamos criar uma branch:
git checkout -b feat/header
Realizar um commit:
git commit -am "Feat: create header"
Criar uma nova branch (a que vai receber o commit, no caso da branch feat/header).
git checkout -b feat/menu-hamburger
Imagine agora que o dev que está desenvolvendo na branch feat/header encontrou um problema e já corrigiu, e a pessoa que está na feat/menu-hamburger precisava ter acesso a essa correção.
Agora precisamos pegar o HASH (Identificador) do commit que queremos, para isso vamos na branch que está o commit:
git checkout feat/header
Rodamos um git log para mostrar os commit e seu respectivo HASH:
git log --oneline
Voltamos para a branch que ira receber o commit:
git checkout feat/menu-hamburger
E rodamos o tão famoso Cherry-pick, lembrando de passar o HASH:
git cherry-pick 68bbe92
Pegar um conjunto de commit
Mas e se eu quiser pegar mais de um commit, será que dá? SIM!, o Cherry pick suporta esse tipo de ação.
Segue os mesmo passos do anterior, porém, invés de pegar apenas um HASH você precisa pegar o último e o primeiro (Calma, eu não digitei errado, o último realmente vem na frente) commit que você quer, e ira pegar todos que estiverem dentro dele, a sintaxe é extremamente fácil:
Devemos pegar os dois HASH (o ultimo e o primeiro):
Lembrando que o HASH-A (o ultimo) deve estar após o HASH-B (o primeiro), ou seja ser mais velho na linha do tempo.
git cherry-pick HASH-A HASH-B
Conflitos:
Caso você queira cancelar um Cherry pick, é simples, passe a flag —abort:
git cherry-pick --abort
Para continuar, use a flag —continue:
git cherry-pick --continue
E para pular, —skip:
git cherry-pick --skip
Nesse post vimos como o Cherry pick é extremamente poderoso e importante de conhecer, em algum momento você vai precisar usar, e ele vai salvar a sua vida. É importante identificar quando é melhor utilizar o Cherry pick e quando usar o Merge, mas fique tranquilo por que isso vem com o tempo.