Există situații frecvente în care un coleg a rezolvat un bug critic pe o ramură experimentală `feature-ai`, dar acea ramură conține și zeci de alte modificări neterminate care nu pot fi îmbinate (merge) încă în producție.
Comanda git cherry-pick extrage exclusiv ‘patch-ul’ generat de commit-ul specificat și îl aplică ca un commit nou pe ramura activă curentă, fără a aduce restul istoricului ramurii sursă.
Este unealta ideală pentru portarea de remedieri de securitate urgente (backporting) între ramuri de versiuni diferite (de exemplu de pe versiunea `v2.0` pe versiunea de suport pe termen lung `v1.8`).
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
|
Identificatorul SHA-1 al commit-ului care trebuie extras și aplicat. |
-n, --no-commit |
Aplică modificările în fișiere și în staging area fără a genera automat un commit nou. |
-e, --edit |
Deschide editorul pentru a permite personalizarea mesajului de commit înainte de salvare. |
--continue / --abort |
Reia procesul după rezolvarea unui conflict sau abandonează complet operațiunea. |
Exemple practice și cod
Exemplul 1: Portarea unui commit de securitate de pe ramura de dev pe ramura main
Cum se extrage un singur commit curat.
# 1. Identificăm hash-ul commit-ului dorit pe ramura de dev:
$ git log --oneline dev
3a8f1b2 Fix vulnerabilitate SQL Injection în login
# 2. Comutăm pe ramura de producție și aplicăm modificarea:
$ git checkout main
$ git cherry-pick 3a8f1b2
[main 9d2c4e1] Fix vulnerabilitate SQL Injection în login
Date: Sat Oct 24 10:15:00 2026
1 file changed, 4 insertions(+), 1 deletion(-)
Rezultat & Impact
Remedierea de securitate este integrată instant pe producție fără modificările colaterale din dev.
Greșeli frecvente și bune practici
- Folosirea abuzivă a comenzii în locul unui merge sau rebase standard, ceea ce duce la duplicarea commit-urilor cu hash-uri diferite în arborele Git.
- Cherry-pick-ul unui commit care depinde de modificări structurale din commit-uri anterioare, declanșând conflicte masive de merge.