O git cherry pick é um comando poderoso do Git que permite ao usuário selecionar commits específicos para trazer ao branch desejado.
Quando trabalhamos em equipes em um projeto, é comum haver momentos em que mais de um desenvolvedor trabalha no mesmo código.
Por exemplo, quando o desenvolvedor back-end cria uma estrutura de dados que o front-end também vai utilizar. O desenvolvedor front-end pode usar o git cherry pick para continuar trabalhando no commit que tem o banco de dados, mas da sua maneira.
Qual o objetivo do comando git cherry pick?
Imagine o seguinte caso, você está trabalhando na branch de cadastro de administradores, e seu colega está trabalhando em uma outra branch relacionada a cadastro de usuários.
Nesse trabalho, seu parceiro acaba encontrando um problema que atinge vocês dois, e faz a correção, mas a task dele ainda está em andamento.
Sendo assim, você não pode fazer o merge, mas você precisa da correção.
O Cherry pick veio para nos ajudar nesse problema! No caso da task ainda estar em andamento, ele consegue pegar um commit e copia-lo de uma branch para a outra.
Mas não é só dar um merge?
Podemos ter alguns problemas quando damos merge em um código que ainda não foi finalizado, ou revisado, caso você use PR.
Você pode tentar dar um rebase ou um merge na branch que seu colega resolveu um erro, mas podem acontecer conflitos.
Em outras palavras, você estará trazendo códigos desnecessários para sua branch, que podem ter erros ou ainda não foram testados.
Como funciona o git cherry pick
Eu trouxe um vídeo em que explico de uma forma mais visual o conceito de git cherry pick e mostro na prática como funciona, confere abaixo:
Além da explicação em vídeo, de uma forma mais visual, trouxe também a explicação em texto, com os códigos explicando o passo a passo.
Então para isso, todos os commits tem um ID, algo parecido com “f13bd3c…“. É esse identificador que você precisa pegar na branch do seu colega de trabalho para poder copiar ele para a sua.
Os passos são bem simples, primeiro vá para a branch do seu colega
git checkout "Nome da branch do seu amigo"
Encontre o ID do commit dele, você pode fazer isso com o git log.
Só para ilustrar, eu usarei este ID para ficar mais fácil a explicação: “f13bd3c3531f26e805c606729857f39987a2420f”
Volte para a sua branch, e digite
git cherry-pick f13bd3c3531f26e805c606729857f39987a2420f
Pronto! Com isso, você copiou apenas o commit que você precisava, sem perder tempo. Por isso é importante trabalhar sempre fazendo pequenos commits.
Imagine se seu colega tivesse criado apenas um commit com o conteúdo do dia inteiro de trabalho, teríamos um grande problema.
Obtendo um intervalo de commit
No exemplo anterior, mostrei como você copia apenas um commit de uma branch para outra, mas você pode trabalhar com um intervalo de commits.
Nesse sentido, pense que seu colega, assim como eu, gosta muito de criar pequenos commits. Para resolver seu problema, você tem que copiar dez commits.
Para resolver o problema, cherry pick permite que você informe o ID do commit inicial e o ID commit final, que aqui chamarei de A e B, respectivamente.
Então, quando falamos de intervalo, você tem duas opções:
Copiar todos os commits, inclusive o primeiro
git cherry-pick A^..B
Ou ignorar o primeiro commit:
git cherry-pick A..B
É importante salientar que o commit A precisa estar após o commit B, ou seja, ser mais velho na timeline.
Conflitos no git cherry pick
Assim como em merges e rebase, em cherry pick também podem acontecer conflitos, e você irá resolve-los da mesma forma que um merge/rebase.
Você pode resolve-los usando uma interface gráfica, ou via terminal.
Pelo terminal, temos dois comandos: o continue que é para você executar depois que resolver o conflito no código.
git cherry-pick --continue
E temos o abort, para cancelar o cherry pick.
git cherry-pick --abort
Parâmetros
Em síntese, esses são os comandos mais comuns que podem te ajudar:
- -e : permite que você edite a mensagem do commit.
- -x: adiciona uma mensagem no commit copiado avisando que ele é um cherry pick de um outro commit – “cherry picked from commit”.
- –allow-empty: por padrão, o cherry-pick não permite commits em branco, com esse parâmetro, ele sobrescreve esse comportamento.
- –allow-empty-message: quando o commit não tem um título, ele é barrado. Assim como no exemplo anterior, esse parâmetro sobrescreve o comportamento.
Cuidado
O Git cherry-pick é um comando muito útil quando bem utilizado, porém ele não pode substituir o git merge e o git rebase. Cada um possui uma situação que se encaixa melhor, mas isso é assunto para um próximo artigo.
Use o cherry-pick só em último caso, cuidado para não sair duplicando commits na sua linha do tempo, use com moderação!
O que você achou do conteúdo? Já conhecia o comando git cherry pick? Já utilizou ele em seu projeto? Deixe um comentário com a sua experiência!
Obrigado ;D