Objetivo: Aprender a usar o Git Cherry-pick para selecionar commits específicos de uma branch e aplicá-los em outra, entendendo quando essa abordagem é útil e suas limitações.
O comando git cherry-pick
permite escolher um commit específico de uma branch e aplicá-lo em outra. É como "colher" apenas os commits desejados, sem precisar mesclar toda a branch.
⚠️ ATENÇÃO: Cherry-pick cria cópias dos commits originais, com novos hashes. Isso pode complicar a história do projeto se usado excessivamente.
# Primeiro, identifique o hash do commit desejado
git log --oneline branch-origem
# Mude para a branch de destino
git checkout branch-destino
# Aplique o commit específico
git cherry-pick abc1234
# Para vários commits não consecutivos
git cherry-pick abc1234 def5678 ghi9012
Para aplicar as mudanças do commit sem criar automaticamente um novo commit:
git cherry-pick --no-commit abc1234
# ou
git cherry-pick -n abc1234
Isso coloca as alterações no seu staging area, permitindo que você faça modificações antes de commitar.
# Para aplicar uma sequência de commits (do mais antigo ao mais recente)
git cherry-pick abc1234^..def5678
Isso aplicará todos os commits desde abc1234
(inclusive) até def5678
.
# Se ocorrer um conflito durante cherry-pick
# 1. Resolva os conflitos nos arquivos (marcados com <<<<<<< e >>>>>>>)
# 2. Adicione os arquivos resolvidos
git add arquivo-com-conflito
# 3. Continue o cherry-pick
git cherry-pick --continue
# Ou para abortar o cherry-pick
git cherry-pick --abort
Cenário: Você corrigiu um bug na branch develop
e precisa aplicar essa correção também na branch release-1.0
que está em produção.
# 1. Identifique o hash do commit de correção
git log --grep="fix: corrige bug" --oneline develop
# Isso retorna algo como: abc1234 fix: corrige bug de validação
# 2. Mude para a branch de lançamento
git checkout release-1.0
# 3. Aplique o commit de correção
git cherry-pick abc1234
# 4. Envie as alterações para o repositório remoto
git push origin release-1.0
Cenário: Uma branch de feature tem vários commits, mas você só quer aplicar algumas partes específicas na branch principal.
# 1. Veja os commits na branch de recursos
git log --oneline feature/novo-recurso
# abc1234 feat: adiciona validação de formulário
# def5678 feat: implementa upload de arquivos
# ghi9012 feat: adiciona sistema de notificações
# 2. Volte para a branch principal
git checkout main
# 3. Cherry-pick apenas o commit de validação e notificações
git cherry-pick abc1234 ghi9012
Objetivo: Praticar a seleção de commits específicos entre branches
feature/recursos-diversos
← Voltar para página principal