Pular para o conteúdo principal

Git Cherry-Pick: Como selecionar e aplicar commits específicos

Saiba como usar o git cherry-pick com exemplos passo a passo, práticas recomendadas e dicas de solução de problemas!
Actualizado 6 de mar. de 2025  · 15 min de leitura

Trabalhar com ramificações em ambientes colaborativos de desenvolvimento de software é essencial para isolar recursos, correções de bugs ou experimentos. No entanto, há momentos em que você precisa fazer alterações específicas em um ramo e aplicá-las a outro sem mesclar o ramo inteiro. É nesse ponto que o site git cherry-pick se torna inestimável. 

O objetivo deste tutorial é fornecer um guia abrangente sobre como usar o git cherry-pick de forma eficaz. Você aprenderá a sintaxe do comando, entenderá como lidar com conflitos e explorará as práticas recomendadas e as armadilhas comuns a serem evitadas. Vamos lá!

O que é o Git Cherry-Pick?

O comando git cherry-pick é um comando fundamental do Git que oferece aos desenvolvedores controle granular sobre seu código-fonte. 

Diferentemente de outras operações do Git, como, como merge ou rebase, que trabalham com ramos inteiros, cherry-pick permite que você faça commits específicos de um ramo e os aplique a outro. Isso proporciona precisão, especialmente em cenários em que você só precisa integrar alterações específicas em vez de todas as modificações em uma ramificação.

O comando git cherry-pick funciona copiando o conteúdo dos commits selecionados e criando novos no branch de destino, mantendo a integridade do histórico de commits.

Quando usar o git cherry-pick

Os casos de uso do git cherry-pick incluem: 

  • Correções de bugs de backporting: Você resolveu um bug em sua ramificação de desenvolvimento e precisa da mesma correção em uma ramificação estável ou de lançamento. A escolha seletiva permite que você mova a correção do bug sem trazer alterações não relacionadas.
  • Aplicação de hotfixes: Quando a produção exige uma correção crítica enquanto as ramificações de desenvolvimento continuam a evoluir, o cherry-picking permite que você extraia e aplique a correção à ramificação de produção.
  • Isolamento de recursos para testes: Somente commits específicos relacionados a um recurso podem precisar ser testados durante o teste. Em vez de mesclar todo o ramo de recursos, você pode escolher os commits necessários para manter o ramo de testes limpo e eficiente.
  • Correção de commits mal posicionados: Se um commit foi enviado por engano para a ramificação errada, você pode selecionar o commit para a ramificação apropriada sem interromper o histórico do projeto.
  • Reutilização de alterações em várias ramificações: Nos casos em que você precisa da mesma atualização em várias ramificações, o cherry-picking permite que você replique as alterações em diferentes ramificações sem refazer o trabalho ou introduzir a complexidade da ramificação.

Aprenda hoje os fundamentos do Git

Para iniciantes: Controle de versão principal usando o Git.
Comece a aprender de graça

Sintaxe do Git Cherry-Pick

Entender a sintaxe do git cherry-pick é fundamental para que você possa usar esse comando com eficiência. Não se trata apenas de selecionar commits, mas de aplicá-los com precisão para alcançar o resultado desejado.

A sintaxe básica para selecionar um único commit é:

git cherry-pick <commit-hash>
  • git cherry-pick: O comando que inicia a operação.
  • : O identificador exclusivo (hash SHA-1) do commit que você deseja selecionar. Você pode encontrar esse hash executando git log para listar o histórico de commits.

Ao executar o comando acima, o Git aplica as alterações do commit especificado ao branch atual, criando um novo commit com as mesmas alterações, mas com um hash diferente. 

É importante observar que o comando transfere apenas o commit em si, não o contexto ou o histórico principal da ramificação original.

Você é novo no Git e no GitHub? Comece a usar o controle de versão neste tutorial amigável do GitHub e do Git.

Como usar o Git Cherry-Pick: Exemplos passo a passo

Agora que você entende a sintaxe básica de git cherry-pick, é hora de ver o comando em ação.

Esta seção fornece exemplos práticos que orientam você em cenários básicos comuns e mais complexos em que o cherry-picking é útil. Cada exemplo ilustra como aplicar as alterações de um ou mais commits a outro branch. 

Exemplo 1: Selecionando um único commit

Digamos que você tenha feito uma correção em um ramo de recursos que deseja aplicar ao ramo principal sem mesclar todo o ramo de recursos.

  • Primeiro, encontre o hash do commit que você deseja selecionar executando:
git log
  • Localize o hash do commit. 
  • Mude para a filial principal:
git checkout main
  • Execute o comando cherry-pick (suponha que o hash seja abc1234):
git cherry-pick abc1234

Quando você executar esse comando, o Git aplicará as alterações do commit identificado por abc1234 ao seu ramo atual (que, nesse caso, é main ). O Git cria um novo commit no branch principal que contém as mesmas alterações que o commit original, mas com um novo hash de commit.

Exemplo 2: Seleção de vários commits

Em algumas situações, você pode precisar aplicar vários commits distintos de uma ramificação para outra. Suponha que você tenha três commits separados em seu ramo de recursos que você precisa trazer para o ramo principal.

  • Encontre os hashes do commit para cada commit que você deseja selecionar usando git log:
git log
  • Mude para a filial principal:
git checkout main
  • Execute o comando cherry-pick, listando os commits:
git cherry-pick abc1234 def5678 ghi7890

Exemplo 3: Escolha seletiva de um intervalo de confirmação

Digamos que você tenha feito uma série de commits no ramo de recursos e queira aplicá-los ao ramo principal de uma só vez, sem especificar cada commit individualmente. Como você faria isso?

  • Use git log para identificar os commits iniciais e finais que você deseja selecionar (por exemplo, abc1234 para ghi7890).
  • Mude para a filial principal:
git checkout main
  • Execute o comando cherry-pick com um intervalo de commits:
git cherry-pick abc1234...ghi7890

Exemplo 4: Escolha de um commit de um ramo remoto

Às vezes, existe uma correção crítica em um ramo remoto e você deseja aplicá-la ao seu ramo local sem mesclar todo o ramo. Veja como você pode fazer isso:

  • Obter as alterações mais recentes do repositório remoto
git fetch origin
  • Liste os commits no ramo remoto para encontrar o hash de que você precisa:
git log origin/feature_branch --oneline
  • Suponha que o hash de confirmação de que você precisa seja abc1234.
  • Mude para sua agência principal local:
git checkout main
  • Escolha o commit do ramo remoto:
git cherry-pick abc1234

Isso permite que você aplique um commit de um ramo remoto sem mesclar o ramo inteiro.

Você precisa verificar uma filial remota? Siga este guia passo a passop sobre o checkout do Git para filiais remotas.

Exemplo 5: Escolher um commit e modificá-lo

Se você escolher um commit, mas precisar fazer pequenas modificações antes de fazer o commit, poderá usar o modo interativo do Git. Veja como:

  • Mudar para o ramo de destino:
git checkout main
  • Escolha o commit, mas pare antes de fazer o commit:
git cherry-pick -n abc1234

O sinalizador -n (ou --no-commit) aplica as alterações, mas não cria um commit.

  • Modifique os arquivos conforme necessário.
  • Stage e confirmar as alterações manualmente:
git add .
git commit -m "Modified cherry-picked commit from feature_branch"

Isso é útil quando você precisa ajustar um commit escolhido a dedo antes de finalizá-lo.

Como lidar com conflitos durante o Git Cherry-Pick

Os conflitos são inevitáveis quando você escolhe os commits entre as ramificações, especialmente quando a base de código divergiu significativamente. 

Embora o site cherry-pick tenha sido projetado para aplicar as alterações de forma limpa, ele nem sempre pode reconciliar as diferenças automaticamente. Nesses casos, os conflitos devem ser resolvidos manualmente. Entender como surgem os conflitos e como lidar com eles é fundamental para concluir uma operação cherry-pick.

Como os conflitos acontecem

Os conflitos geralmente ocorrem quando as alterações do commit cherry-picked se sobrepõem ou contradizem as alterações já presentes no branch de destino. Por exemplo:

  • A mesma linha foi modificada em ambas as ramificações: Se a mesma linha de código for modificada nas ramificações de origem e de destino, o Git não saberá qual versão aplicar.
  • Arquivo excluído em uma ramificação, mas modificado em outra: Se um arquivo for excluído em uma ramificação, mas modificado no commit escolhido a dedo, o Git não saberá se deve mantê-lo ou aplicar as alterações.
  • Alterações não relacionadas, mas o mesmo arquivo: Mesmo quando as alterações parecem não estar relacionadas, se elas ocorrerem no mesmo arquivo, o Git poderá sinalizá-las como um possível conflito.

Quando ocorrer um conflito, o Git interromperá a operação cherry-pick, deixando o seu diretório de trabalho em um estado conflitante que deve ser resolvido antes de continuar.

Resolução de conflitos

Quando surgir um conflito, o Git fornecerá indicadores dos arquivos conflitantes, e você precisará resolver manualmente as discrepâncias. Veja como você pode resolver conflitos:

1. Verifique os arquivos conflitantes: Execute o seguinte comando para ver quais arquivos estão em conflito:

git status

O comando exibirá a lista de arquivos com conflitos. 

2. Resolver os conflitos: Você pode editar manualmente os arquivos conflitantes para resolver os problemas. Remova os marcadores de conflito (<<<<<<<, =======, >>>>>>>) e determine quais alterações você deve manter ou como combiná-las.

3. Use o Git Mergetool (opcional): Se a resolução de conflitos manualmente for complicada, você poderá usar uma ferramenta de mesclagem para ajudar na visualização e na resolução de conflitos:

git mergetool

Dependendo da sua configuração, a ferramenta acima abrirá uma ferramenta de mesclagem visual, o que facilita a revisão e a resolução de conflitos.

4. Marque os conflitos como resolvidos: Depois de resolver os conflitos, marque os arquivos como resolvidos usando:

git add <conflicted-file>

5. Complete a coleta de cerejas: Depois que todos os conflitos forem resolvidos e os arquivos forem preparados, finalize a seleção por cereja executando:

git cherry-pick --continue

Muitos IDEs e ferramentas modernos, como o Visual Studio Code e o GitHub, oferecem recursos integrados de resolução de conflitos de mesclagem. A interface da Web do GitHub permite que você resolva conflitos diretamente nas solicitações pull, facilitando a colaboração em repositórios compartilhados sem precisar mudar para um ambiente local.

Ignorar um commit após um conflito

Às vezes, a resolução de um conflito pode ser muito complexa ou você pode perceber que o compromisso não é necessário, afinal. Nesses casos, você pode ignorar totalmente o commit.

1. Abortar o processo de seleção de cereja atual: Se o conflito for muito complicado e você não quiser aplicar o commit, poderá ignorá-lo executando:

git cherry-pick --skip

Isso abandonará o commit conflitante e passará para o próximo (se você estiver selecionando vários commits).

2. Abortar toda a seleção de cerejas: Se quiser abortar completamente a operação cherry-pick, você pode executar:

git cherry-pick --abort

Esse comando restaurará o diretório de trabalho para o estado em que se encontrava antes de você iniciar o cherry-pick. 

Você quer limpar o histórico de commits? Saiba como combinar vários commits em um só com este tutorial de squash do Git.

Práticas recomendadas para usar o Git Cherry-Pick

O uso indevido do site cherry-pick pode gerar históricos complicados e confusão no controle de versão do seu projeto. Para evitar essas armadilhas, a adesão às práticas recomendadas garante que você esteja usando o cherry-pick de forma eficaz, sem introduzir complexidade desnecessária à sua base de código.

Mantenha-o pequeno e específico

O cherry-picking é mais eficaz quando usado para commits pequenos e específicos que tratam de tarefas bem definidas, como correções de bugs ou aprimoramentos de recursos menores. 

Evite selecionar commits grandes e complexos que agrupem várias alterações, pois isso pode gerar conflitos e dificultar o gerenciamento da base de código. Quanto mais direcionado for o compromisso, mais fácil será aplicá-lo sem efeitos colaterais indesejados.

Documente suas escolhas

Para manter um histórico claro, sempre forneça o contexto adequado quando você fizer uma seleção seletiva. Isso pode ser feito por meio de mensagens detalhadas de confirmação ou anotações na documentação. 

A essência principal é que você deve explicar por que foi necessário fazer uma seleção seletiva. Isso é particularmente importante quando você seleciona ramos de longa duração ou ambientes colaborativos, pois ajuda os futuros colaboradores a entender por que as alterações foram aplicadas seletivamente.

Revisar o histórico de confirmações

Antes de fazer o cherry-picking, revise o histórico de commits das ramificações de origem e de destino. Essa etapa ajuda a identificar se o commit que você está prestes a selecionar depende de outras alterações. A falta de dependências pode resultar em funcionalidade incompleta ou bugs, portanto, certifique-se de que a escolha seletiva não introduza recursos ou atualizações incompletos.

Evite o uso excessivo de seleção seletiva

Embora o cherry-picking seja conveniente para aplicar alterações específicas, seu uso excessivo pode levar a um histórico fragmentado com commits duplicados entre as ramificações. Isso pode dificultar o rastreamento da origem de determinadas mudanças ou a compreensão do contexto de desenvolvimento mais amplo. 

Sempre avalie se a mesclagem ou o rebase é uma estratégia mais apropriada antes de fazer uma seleção seletiva. Use o site cherry-pick com moderação e de forma intencional para evitar sobrecarregar o histórico do commit.

Você está tendo problemas com arquivos desnecessários no Git? Saiba como usar o .gitignore de forma eficaz com o neste tutorial sobre como ignorar o Git.

Solução de problemas comuns com o Git Cherry-Pick

A solução de problemas que surgem ao usar o site cherry-pick requer uma compreensão clara dos mecanismos subjacentes do Git. Nesta seção, abordarei alguns problemas comuns que você pode encontrar ao fazer cherry-picking e como resolvê-los.

Escolhendo um commit que não existe

Às vezes, você pode tentar escolher um commit que não esteja acessível na ramificação atual ou que já tenha sido mesclado. Normalmente, isso resulta em uma mensagem de erro informando que o commit não pôde ser encontrado ou aplicado.

1. Compromisso não encontrado: Isso acontece quando o hash do commit que você está tentando selecionar não existe no repositório atual ou no contexto do branch. Certifique-se de que você está fazendo referência ao commit correto, verificando o histórico de commits com git log na ramificação em que o commit existe. Solução:

  • Verifique novamente o hash do commit para garantir que esteja correto.
  • Verifique se o commit existe em uma ramificação à qual você tem acesso.
  • Se o commit estiver em uma ramificação remota, verifique se a ramificação foi obtida com git fetch.

2. Compromisso já aplicado: Se o commit já tiver sido mesclado ou escolhido a dedo no ramo de destino, o Git impedirá que você o duplique. Essa proteção mantém o histórico limpo e evita alterações redundantes. Solução:

  • Use git log para verificar se o commit já está no ramo de destino.
  • Se necessário, ignore a operação cherry-pick, pois as alterações já foram aplicadas.

Escolha seletiva após um rebase ou uma mesclagem

A escolha seletiva após um rebase ou mesclagem pode introduzir complexidades devido ao histórico alterado de suas ramificações. O rebase reescreve os históricos dos commits, enquanto a mesclagem combina os ramos, o que pode afetar a aplicabilidade de um cherry-pick.

1. Conflitos devido a commits refeitos: Após um rebase, o histórico de commits é reescrito, o que pode causar problemas se você tentar selecionar commits que foram alterados durante o processo de rebase. Você pode entrar em conflito quando o cherry-pick tentar aplicar alterações que não estejam alinhadas com o histórico reescrito. Solução:

  • Revise cuidadosamente o histórico de commits após um rebase usando git log para garantir que o commit que você está escolhendo não tenha sido modificado.
  • Resolva os conflitos como você faria em um processo cherry-pick padrão, usando git status e edições manuais.

2. Duplicar commits após uma mesclagem: A mesclagem de ramificações pode levar a uma situação em que um commit que você deseja selecionar já foi incluído no histórico mesclado. Se você selecioná-lo novamente, poderá fazer commits duplicados, o que pode bagunçar o seu histórico e dificultar o rastreamento das alterações. Solução:

  • Antes de fazer o cherry-picking, inspecione o histórico de commits em ambas as ramificações para confirmar se o commit já foi mesclado.
  • Evite escolher o mesmo commit se ele já estiver no ramo de destino.

Você precisa desfazer alterações no Git? Saiba quando você deve usar git reset em vez de git revert no tutorialis Git reset and revert.

Conclusão

git cherry-pick é uma maneira poderosa de aplicar commits específicos de um ramo para outro sem mesclar o ramo inteiro. Quer você esteja movendo uma correção de bug, uma atualização de recurso ou apenas aplicando alterações seletivamente, isso ajuda a manter o histórico do Git limpo e focado.

Neste guia, falei sobre como selecionar commits únicos e múltiplos, resolver conflitos e seguir as práticas recomendadas para evitar armadilhas comuns. Usando o cherry-pick com sabedoria, você pode melhorar seu fluxo de trabalho e manter seu repositório organizado.

Se você deseja aprofundar suas habilidades no Git, confira Foundations of Git para ter um bom ponto de partida. Você também pode explorar a Introdução aos conceitos do GitHub ou adotar uma abordagem estruturada com o programa de habilidades GitHub Foundations.

Agora que você já sabe como fazer o cherry-pick como um profissional, experimente fazer isso em seu próximo projeto!

Aprenda hoje os fundamentos do Git

Para iniciantes: Controle de versão principal usando o Git.

Perguntas frequentes

O que acontece se eu escolher o mesmo commit duas vezes?

Se você tentar selecionar um commit que já tenha sido aplicado ao ramo de destino, o Git poderá criar um commit duplicado com um novo hash. Para verificar se um commit já foi aplicado, use:

git log --oneline

Como alternativa, se você não tiver certeza, use:

git cherry-pick -n 

Isso aplica as alterações sem confirmá-las, permitindo que você as revise antes de finalizar.

Posso selecionar os commits de um ramo excluído?

Sim! Mesmo que o ramo tenha sido excluído, os commits ainda podem existir no histórico do Git.

Use git reflog para encontrar o hash do commit e, em seguida, selecione-o como de costume.

No entanto, se o Git já tiver coletado o ramo, os commits poderão ser perdidos.

Como faço para selecionar um commit de um repositório diferente?

Para fazer cherry-pick de outro repositório, primeiro adicione-o como remoto:

git remote add other-repo 
git fetch other-repo

Em seguida, identifique o commit e faça uma seleção seletiva:

git cherry-pick 

Posso selecionar um commit que inclua exclusões de arquivos?

Sim, o cherry-picking preserva todas as alterações no commit, inclusive as exclusões de arquivos. Se um commit excluir um arquivo, o cherry-picking removerá o arquivo no branch de destino.

Como faço para desfazer uma escolha seletiva?

Se você tiver escolhido um commit por engano e ainda não o tiver enviado, poderá desfazê-lo usando:

git reset --hard HEAD~1

Se você já tiver pressionado o botão "cherry-pick", use:

git revert 

Isso cria um novo commit que desfaz as alterações escolhidas a dedo.

Qual é a diferença entre o git cherry-pick e o git apply?

  • git cherry-pick copia um commit específico e o aplica ao ramo de destino, mantendo os metadados do commit.
  • git apply é usado para aplicar arquivos de correção (criados com git diff), mas não cria um novo commit nem preserva o histórico de commits.

Como posso selecionar um commit e manter o autor original?

Por padrão, o site git cherry-pick define você como o autor. Para manter o autor do commit original, use:

git cherry-pick -x 

Isso adiciona uma referência ao commit original na nova mensagem de commit.

Posso selecionar vários commits não sequenciais?

Sim! Em vez de especificar um intervalo, liste os hashes de confirmação individuais:

git cherry-pick   

Isso é útil quando você precisa selecionar apenas os commits de uma ramificação.

Como faço para evitar conflitos ao fazer a seleção por ramos?

Antes de fazer o cherry-picking, verifique se sua filial está atualizada:

git pull origin main

Além disso, revise o histórico de commits para confirmar que as alterações não dependem de outros commits ausentes. Se ocorrerem conflitos, resolva-os manualmente e continue:

git cherry-pick --continue

Quando devo evitar o uso do git cherry-pick?

O uso excessivo do git cherry-pick pode levar a um histórico de commits confuso, com commits duplicados entre as ramificações. É melhor evitá-lo quando:

  • As alterações envolvem vários commits dependentes - um merge ou rebase pode ser uma escolha melhor.
  • Você precisa sincronizar regularmente as ramificações - o rebasing ou a mesclagem mantém o histórico mais limpo.
  • O commit inclui grandes refatorações, pois o cherry-picking move apenas alterações específicas, não o contexto mais amplo do branch.

Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Temas

Saiba mais sobre o Git com estes cursos!

Curso

Introduction to Git

2 hr
15.5K
Discover the fundamentals of Git for version control in your software and data projects.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
Git

blog

O que é Git? Manual completo do Git

Saiba mais sobre o sistema de controle de versão mais conhecido e por que é uma ferramenta de colaboração indispensável para cientistas de dados e programadores.
Summer Worsley's photo

Summer Worsley

14 min

Tutorial

Tutorial de push e pull do GIT

Saiba como realizar solicitações Git PUSH e PULL por meio do GitHub Desktop e da linha de comando.

Olivia Smith

13 min

Tutorial

Tutorial do GitHub e do Git para iniciantes

Um tutorial para iniciantes que demonstra como funciona o controle de versão do Git e por que ele é crucial para projetos de ciência de dados.
Abid Ali Awan's photo

Abid Ali Awan

17 min

Tutorial

Git Rename Branch: Como renomear uma filial local ou remota

Saiba como renomear ramificações locais e remotas do Git usando o terminal ou a interface gráfica do usuário (GUI) de clientes populares como o GitHub.

Tutorial

Git Pull Force: Como substituir uma ramificação local por uma remota

Saiba por que o git pull --force não é a melhor maneira de substituir uma ramificação local pela versão remota e descubra o método adequado usando git fetch e git reset.

Tutorial

Git Prune: O que é o Git Pruning e como usar o Git Prune

O Git prune é um comando do Git que remove objetos do repositório que não são mais acessíveis a partir de qualquer commit ou branch, ajudando a liberar espaço em disco.
Ver maisVer mais