Cherry-Picking Explained
A ajuda online do Git tem uma descrição perfeitamente precisa, mesmo que caracteristicamente sucinta, do que o comando faz:
Dados um ou mais commits existentes, aplica a mudança que cada um introduz, gravando um novo commit para cada um.
Eu já tinha mencionado (lá na página sobre Garbage Collection) que o ID de um commit do Git é um hash do seu conteúdo e do seu histórico. Então, mesmo que você tenha dois commits que introduzem exatamente a mesma mudança, se eles apontam para commits pais diferentes, eles terão IDs diferentes.
O que o git cherry-pick
faz, basicamente, é pegar um commit de algum outro lugar, e "reproduzí-lo" onde quer que você esteja agora. Como isso introduz a mesma mudança com um pai diferente, o Git constroi um novo commit com um ID diferente.
Vamos voltar ao exemplo da seção Reachability:

Se você estivesse no vértice H deste grafo, e você digitasse git cherry-pick E
(sim, você na verdade digitaria parte ou todo o SHA do commit, mas para simplificar, vamos apenas usar os rótulos que já estão aqui), você acabaria com uma cópia do commit E—vamos chamá-lo de "E linha" ou E'—que apontava para H como seu pai, como:

Ou, se você digitasse algo como git cherry-pick C D E
, você acabaria com isso quando estivesse terminado:

O importante a perceber aqui é que o Git copiou as mudanças feitas num lugar, e as reproduziu em algum outro lugar.
Eis uma rápida apresentação dos passos deste processo:
- About This Site
- Git Makes More Sense When You Understand X
- Example 1: Kent Beck
- Example 2: Git for Ages 4 and Up
- Example 3: Homeomorphic Endofunctors
- Example 4: LSD and Chainsaws
- The Internet Talks Back!
- Graph Theory
- Seven Bridges of Königsberg
- Places To Go, and Ways to Get There
- Nodes and Edges
- Attaching Labels to Nodes
- Attaching Labels to Edges
- Directed Versus Undirected Graphs
- Reachability
- Graphs and Git
- Visualizing Your Git Repository
- References
- The Reference Reference
- Making Sense of the Display
- Garbage Collection
- Experimenting With Git
- References Make Commits Reachable
- My Humble Beginnings
- Branches as Savepoints
- Use Your Targeting Computer, Luke
- Testing Out Merges
- Rebase From the Ground Up
- Cherry-Picking Explained ←HEAD
- Using 'git cherry-pick' to Simulate 'git rebase'
- A Helpful Mnemonic for 'git rebase' Arguments
- The End