Git Cherry Pick: o que é e quando usar? 3 exemplos!

Atualmente, é quase impossível não utilizar uma ferramenta de versionamento do código-fonte de uma aplicação que estamos fazendo, seja ela com outra pessoa ou em um desenvolvimento solo. No caso, a ferramenta mais utilizada para esse fim seria o Git, que tem uma série de comandos para fazer esse versionamento, como o git cherry pick

Porém, a utilização do Git pode parecer um pouco complexa para pessoas iniciantes no mundo da programação e o seu mau uso poderá ocasionar em problemas de difícil resolução. Imagine você levando o dia inteiro para resolver um problema e, quando você consegue finalmente solucionar, outra pessoa sobrescreve outro código em cima do seu, por engano. Seria bem desagradável, concorda? 

Por isso, para você aprender mais sobre a ferramenta Git, demonstraremos neste artigo um comando, que é o git cherry pick. Ele pode ajudar muitos programadores e programadoras a terem um trabalho mais tranquilo com o Git. Vamos ver como esse comando funciona a fundo?

O que é e para que serve o comando Git Cherry Pick?

O Git Cherry Pick é utilizado para pegar um commit específico para a task que ele está trabalhando no momento. Seu uso é altamente recomendado para projetos de médio e grande porte em nosso cotidiano.
Para entender a sua função, vejamos a imagem a seguir: 

Ilustração de como funciona o git cherry pick

No caso, a master seria o “carro chefe”, onde todo o código de produção se encontra. Vamos imaginar que você está trabalhando com uma pessoa amiga em um sistema de imóveis. Ela está trabalhando numa tela de cadastro de pessoas na plataforma, enquanto você está cuidando da tela de cadastro da tela de corretores. 

No caso, ela acaba encontrando um problema que afeta o seu desenvolvimento também. E agora? Você precisa dessa correção para continuar seu trabalho. E, nesse caso, tal comando permitirá que você pegue um commit específico que a outra pessoa fez e copiá-lo para a tarefa que você está trabalhando. 

Não se preocupe caso não tenha ficado explícito o comando para você no momento, pois serão demonstrados exemplos práticos ao decorrer do artigo. 

Por ora, imagine que você está em uma lanchonete e a pessoa cozinheira começa a fazer seu pedido. Subitamente, ela precisa sair por motivos pessoais e outra continuará o seu pedido. A lógica do comando seria similar a isso. 

Quais as diferenças entre os comandos Git Cherry Pick, Rebase e Merge?


Antes da diferença entre os comandos serem explicadas, vamos entender o que os comandos git rebase e git merge significam:

  • O git merge permite que você modifique todas as suas branches de desenvolvimento para a branch master, que seria a principal;
  • Já o git rebase integra alterações entre uma branch de desenvolvimento e outra, sem jogar para a branch principal do repositório. 

Ou seja, as diferenças são: 

  • O comando git merge não altera nenhum commit existente, ele apenas cria um novo commit de mesclagem, que tem dois ou mais branches;
  • O comando git rebase, em outras palavras, reescreve a história do commit, gerando uma nova identificação a ele;
  • O comando git cherry pick reaplica um commit dedicado no branch atual, com uma nova identificação. No caso, o commit original escolhido permanece intocado.

Quando devo usar o comando Git Cherry Pick? 

Apesar dele ter a oportunidade de pegar um commit em específico para trabalhar nele do jeito desejado, ele deverá ser utilizado em último caso, apenas. O motivo disso seria que, quando você seleciona essa parte específica do código, um histórico de duplicação do commit é criado em seu repositório, dificultando assim, o controle dos programadores ou programadoras para a aplicação.

Legal! Até agora consegui entender tudo! Mas, como utilizo esse comando, na prática? Isso será assunto da próxima seção. 

Como funciona o Git Cherry Pick na prática? 3 exemplos de uso

Pegando apenas um commit de outra branch!

Vamos abrir o prompt de comando de um projeto que já tenha um repositório no GitHub e digitar o comando git log: 

Identificação de commits

Como você pode observar, todo commit gera uma identificação, que seria a que está em amarelo. 


Nesse caso, para pegar apenas um commit de seu amigo ou amiga, por exemplo, essa identificação precisará ser utilizada:

Selecionando uma identificação
Utilizando o Git Cherry Pick com a identificação


Ou seja, devemos escrever: git cherry-pick identificacao_do_commit

Pegando um intervalo de commits!

Para pegar um intervalo de cinco commits mais recentes, por exemplo, chamaremos de 1 como identificação do primeiro commit e 5 como identificação do último commit realizado. Nesse caso, há duas opções: 

  • a) Ignorando o primeiro commit
Pegando primeiro e último commits com git cherry pick
  • b) Copiando todos os commits do intervalo especificado: 
Pegando um intervalo especificado de commits

Adicionar apenas as alterações no commit selecionado

Para isso, devemos utilizar a escrita similar ao copiar um único commit, colocando a opção —no-commit ao final. Isso fará que apenas as alterações feitas no commit selecionado sejam adicionadas na sua cópia: 

Adicionando alterações no commit selecionado

Trabalhando com conflitos

Para os conflitos, temos os seguintes comandos: 

  • –continue: serve para que o comando seja executado após os conflitos serem resolvidos;
Comando --continue git cherry pick
  • –abort: esse comando realiza o cancelamento do cherry pick;
Comando --abort git cherry pick
  • –skip: ele ignora o commit atual e segue com o restante da sequência de commits que o repositório possui.
Comando --skip git cherry pick

Quais os comandos mais comuns usados no Git Cherry Pick?

A seguir, vemos alguns comandos que são utilizados no comando cherry pick: 

  • -e: esse comando permite que a mensagem do commit seja alterada. A mensagem é aquela que você utiliza para explicar o que foi feito em determinada tarefa;
  • -x: para outro desenvolvedor ou desenvolvedora que for ver o histórico de commits, esse comando alertará que ele é um cherry pick de outro commit, a ser especificado pela pessoa desenvolvedora;  
  • –allow-empty: traduzindo para o Português, significa “permitir vazio”, pois, por padrão, nenhum git cherry pick deixa commits serem feitos em branco. Utilizando esse comando, isso é permitido;
  • –allow-empty-message: da mesma forma que o comando não permite ser feitos commits vazios, ele também não aceita commits sem títulos. Mas, utilizando esse comando, isso é permitido.

Vejamos a seguir algumas vantagens de utilizarmos o Git Cherry Pick.

Quais as vantagens de usar o Git Cherry Pick?

As vantagens de utilizar o comando git cherry pick são as seguintes: 

  • Podem corrigir bugs de uma forma simples, selecionando uma parte específica do código que foi para a produção;
  • Comparado com outro comando, o git diff, o uso do git cherry pick é mais recomendado, pela especificação de qual commit pegar ser mais correta;
  • Ela permite, conforme o exemplo mencionado, que você e outra pessoa desenvolvedora trabalhem juntos em uma correção dentro de um projeto que estejam fazendo.

Porém, o comando git cherry pick possui algumas contra indicações que serão exibidas no tópico a seguir.

Cuidados ao usar o Cherry Pick!

Apesar das vantagens acima apresentadas, o comando requer cuidados para ser utilizado. Esse comando só pode ser usado em último caso, pois, no histórico de commits de seu repositório, ele pode ter vários commits duplicados se você utilizar esse comando de forma não controlada. Portanto, ele deverá ser utilizado com moderação. 

Além disso, acompanhado dessa utilização desconhecida no comando, o seu repositório poderá ficar muito bagunçado e, de difícil controle do código-fonte para pessoas que verão o histórico que esse código terá. 

Muito legal esse comando, não é? Ele é apenas um, dos vários existentes no ecossistema do Git. Ele serve para pegar partes específicas do código de uma aplicação para que sejam editadas conforme o desejado pela pessoa desenvolvedora, sem interferir, necessariamente, em outros membros da equipe envolvidos no projeto. 

Contudo, seu uso deve ser feito com moderação e somente quando necessário, pois muitas pessoas desconhecem como usar o git cherry pick e usam ele sem nem saber o porquê. Como resultado, teremos um repositório cheio de commits duplicados e desorganizados. Portanto, é necessário cuidado ao utilizar o git cherry pick.

Se interessou pelo Git? Então, para aprofundar seu conhecimento nessa ferramenta, confira esse artigo que aborda o comando git stash.