|
| 1 | +--- |
| 2 | +title: 'Cherry-pick do Git: A Arte de Colher Commits Específicos' |
| 3 | +date: Wed, 23 Jul 2025 10:00:00 +0000 |
| 4 | +draft: false |
| 5 | +tags: ['Git', 'Controle de Versão', 'Cherry-pick', 'Desenvolvimento', 'Versionamento'] |
| 6 | +--- |
| 7 | + |
| 8 | +Já imaginou poder pegar aquele commit específico de uma branch e aplicá-lo em outra, sem todo o drama de um merge completo? É aí que entra o **cherry-pick** do Git – uma ferramenta que é quase como usar uma pinça cirúrgica no seu código. |
| 9 | + |
| 10 | +## O que é Cherry-pick? |
| 11 | + |
| 12 | +O cherry-pick é literalmente "colher cerejas" – você escolhe exatamente qual commit quer aplicar em sua branch atual. É como se você dissesse: "Quero só essa mudança específica, obrigado". Não precisa trazer toda a bagunça junto. |
| 13 | + |
| 14 | +## Quando Usar? |
| 15 | + |
| 16 | +Cenários clássicos onde o cherry-pick brilha: |
| 17 | + |
| 18 | +- **Bug crítico em produção**: Você tem a correção em `develop`, mas não pode fazer merge de tudo |
| 19 | +- **Feature específica**: Precisa de uma funcionalidade que está em outra branch, mas o resto não |
| 20 | +- **Hotfix seletivo**: Aplicar correções pontuais sem quebrar o fluxo de trabalho |
| 21 | + |
| 22 | +## Como Funciona na Prática |
| 23 | + |
| 24 | +### Comando básico |
| 25 | +```bash |
| 26 | +git cherry-pick <hash-do-commit> |
| 27 | +``` |
| 28 | + |
| 29 | +### Exemplo real |
| 30 | +```bash |
| 31 | +# Você está na branch main e quer um commit da develop |
| 32 | +git checkout main |
| 33 | +git cherry-pick a1b2c3d4 |
| 34 | +``` |
| 35 | + |
| 36 | +### Cherry-pick múltiplo |
| 37 | +```bash |
| 38 | +# Vários commits específicos |
| 39 | +git cherry-pick a1b2c3d4 e5f6g7h8 |
| 40 | + |
| 41 | +# Range de commits |
| 42 | +git cherry-pick a1b2c3d4..e5f6g7h8 |
| 43 | +``` |
| 44 | + |
| 45 | +## Lidando com Conflitos |
| 46 | + |
| 47 | +Quando rola conflito (e vai rolar), o Git pausa o processo: |
| 48 | + |
| 49 | +```bash |
| 50 | +# Resolver conflitos manualmente nos arquivos |
| 51 | +# Depois: |
| 52 | +git add . |
| 53 | +git cherry-pick --continue |
| 54 | + |
| 55 | +# Ou desistir: |
| 56 | +git cherry-pick --abort |
| 57 | +``` |
| 58 | + |
| 59 | +## Opções Úteis |
| 60 | + |
| 61 | +### Manter referência ao commit original |
| 62 | +```bash |
| 63 | +git cherry-pick -x a1b2c3d4 |
| 64 | +``` |
| 65 | +Adiciona uma linha: `(cherry picked from commit a1b2c3d4)` |
| 66 | + |
| 67 | +### Não committar automaticamente |
| 68 | +```bash |
| 69 | +git cherry-pick -n a1b2c3d4 |
| 70 | +``` |
| 71 | +Útil quando você quer revisar antes de committar. |
| 72 | + |
| 73 | +## Cenário Real: Hotfix em Produção |
| 74 | + |
| 75 | +```bash |
| 76 | +# 1. Identificar o commit na develop |
| 77 | +git log develop --oneline | grep "fix critical bug" |
| 78 | +# 7f8a9b0c fix critical bug in payment validation |
| 79 | + |
| 80 | +# 2. Aplicar na main (produção) |
| 81 | +git checkout main |
| 82 | +git cherry-pick -x 7f8a9b0c |
| 83 | + |
| 84 | +# 3. Deploy para produção |
| 85 | +git push origin main |
| 86 | +``` |
| 87 | + |
| 88 | +## Pegadinhas a Evitar |
| 89 | + |
| 90 | +### 1. Duplicação de Commits |
| 91 | +Cherry-pick cria novos commits com novos hashes. Se depois você fizer merge da branch original, pode rolar duplicação no histórico. |
| 92 | + |
| 93 | +### 2. Perda de Contexto |
| 94 | +O commit pode não fazer sentido fora do contexto original da branch. |
| 95 | + |
| 96 | +### 3. Dependências Quebradas |
| 97 | +Um commit pode depender de mudanças anteriores que não foram aplicadas. |
| 98 | + |
| 99 | +## Dicas de Sobrevivência |
| 100 | + |
| 101 | +### 1. Use com Moderação |
| 102 | +Cherry-pick não é bala de prata. Abuse dele e vai ter um histórico bagunçado que nem você vai entender depois. |
| 103 | + |
| 104 | +### 2. Commits Limpos |
| 105 | +Funciona melhor com commits bem definidos e atômicos. Aquele commit gigante com "fix varios bugs" vai dar dor de cabeça. |
| 106 | + |
| 107 | +### 3. Teste Sempre |
| 108 | +Nunca assuma que o cherry-pick vai funcionar perfeitamente. Sempre teste depois de aplicar. |
| 109 | + |
| 110 | +## Conclusão |
| 111 | + |
| 112 | +Cherry-pick é aquela ferramenta que você não usa todo dia, mas quando precisa, ela salva a vida. É perfeita para situações específicas onde você precisa de cirurgia, não de machado. |
| 113 | + |
| 114 | +**Pontos-chave:** |
| 115 | +- Use para commits específicos, não para integração massiva |
| 116 | +- Sempre teste após aplicar |
| 117 | +- Cuidado com duplicação no histórico |
| 118 | +- Prefira commits atômicos e bem documentados |
| 119 | + |
| 120 | +Lembre-se: com grandes poderes vêm grandes responsabilidades. Use com parcimônia e sempre pense no impacto no histórico do projeto. |
| 121 | + |
| 122 | +E aí, já teve que usar cherry-pick em alguma situação crítica? Conte sua experiência! |
0 commit comments