Ein Hotfix ist fertig, aber liegt im falschen Branch. Oder ein einzelner Commit aus einem Feature-Branch soll schnell in main, ohne dass gleich das ganze Feature mitkommt. Genau für solche Situationen gibt es Git Cherry-Pick: Ein bestimmter Commit wird „herausgegriffen“ und auf einen anderen Branch übertragen.
Das klingt simpel – und ist es oft auch. Trotzdem entstehen in der Praxis schnell doppelte Änderungen, Konflikte oder eine Historie, die später schwer zu verstehen ist. Mit den richtigen Regeln bleibt Cherry-Pick ein sauberes Werkzeug statt einer Fehlerquelle.
Was Cherry-Pick in Git wirklich macht
Bei einem Merge werden zwei Entwicklungsstränge zusammengeführt. Bei Rebase wird eine Branch-Historie „umgehängt“. Ein Cherry-Pick funktioniert anders: Git nimmt einen Commit (oder mehrere) und erstellt auf dem Ziel-Branch einen neuen Commit mit denselben Änderungen.
Wichtig: Es ist nicht derselbe Commit, sondern ein neuer mit anderer Commit-ID. Das ist der Kern vieler Missverständnisse.
Warum die Commit-ID sich ändert
Ein Commit in Git hängt immer von seiner Vorgeschichte ab (technisch: von den Vorgänger-Commits). Wenn derselbe Inhalt auf einem anderen Branch landet, ist die Vorgeschichte eine andere – also entsteht ein neuer Commit. Das ist normal und kein Fehler.
Wann Cherry-Pick die passende Lösung ist
Cherry-Pick ist ideal, wenn wirklich nur ein klar abgegrenzter Commit (oder eine kleine Reihe) gebraucht wird, zum Beispiel:
- Ein kritischer Bugfix aus einem Feature-Branch soll sofort in den Release-Branch.
- Ein einzelner Refactor-Commit wird für ein anderes Team kurzfristig benötigt.
- Ein Commit aus einem alten Branch soll nachträglich in einen neuen Branch übernommen werden.
Typische Risiken: Duplikate, Konflikte, „unsichtbare“ Abhängigkeiten
Cherry-Pick wirkt wie eine Abkürzung. In Teams ist es aber wichtig, die Nebenwirkungen zu kennen.
Doppelte Änderungen und spätere Merge-Konflikte
Wenn ein Commit per Cherry-Pick in Branch A übernommen wird und später Branch B (wo der Commit ursprünglich entstanden ist) ganz normal gemergt wird, kann Git dieselbe Änderung zweimal sehen. Das endet oft in unnötigen Konflikten oder in einer Historie, die schwer nachzuvollziehen ist.
Ein guter Grundsatz: Cherry-Pick sparsam einsetzen – und im Team transparent machen (z. B. im Pull-Request beschreiben).
Abhängige Commits: Der „eine Commit“ ist selten allein
In der Praxis hängt ein Commit oft von vorherigen Änderungen ab: neue Helper-Funktionen, umbenannte Variablen, geänderte Tests oder Datenbank-Updates. Wird nur der „sichtbare“ Fix gepickt, fehlen im Ziel-Branch wichtige Voraussetzungen.
Das Ergebnis sind Build-Fehler, fehlschlagende Tests oder ein Fix, der nur scheinbar übernommen wurde. Deshalb vor dem Cherry-Pick kurz prüfen: Welche Commits gehören fachlich wirklich zusammen?
Wann statt Cherry-Pick eher Merge oder Rebase passt
Wenn ganze Feature-Pakete übernommen werden sollen, ist ein normaler Merge meist die bessere Wahl. Wenn die Branch-Historie aufgeräumt werden soll, ist Rebase oft sinnvoller. Dazu passt als Hintergrund: Git Rebase verstehen – Branches sauber zusammenführen.
Cherry-Pick Schritt für Schritt: so bleibt es sauber
Im Alltag geht es meistens darum, einen Commit aus einem anderen Branch zu holen. Die folgenden Schritte funktionieren unabhängig davon, ob es ein Feature- oder Hotfix-Branch ist.
1) Ziel-Branch wählen und Arbeitsverzeichnis prüfen
Zuerst auf den Branch wechseln, der die Änderung erhalten soll. Außerdem sollte der Working Tree sauber sein (keine uncommitted Änderungen), damit Konflikte nicht unnötig kompliziert werden.
- Auf Ziel-Branch wechseln (z. B. main oder release).
- Lokale Änderungen committen oder stashen, falls nötig.
- Optional: den Ziel-Branch vorher aktualisieren (pull), um auf aktuellem Stand zu arbeiten.
2) Den richtigen Commit identifizieren
Der wichtigste Teil ist oft nicht der Befehl, sondern die Auswahl. Im Commit-Log sollte klar sein:
- Welche Änderung soll übernommen werden?
- Gehört ein weiterer Commit dazu (z. B. Tests, kleine Vorbereitung, Fix für Edge-Case)?
- Ist es wirklich ein einzelner Commit oder eine kleine Kette?
3) Commit übernehmen und Ergebnis prüfen
Beim Ausführen erstellt Git auf dem Ziel-Branch einen neuen Commit. Danach sollte sofort geprüft werden, ob alles passt: Tests laufen, Build klappt, keine Nebenwirkungen. Wer systematisch prüfen möchte, findet passende Strategien auch in PHP Unit Tests schreiben – saubere Basis für wartbaren Code (Prinzipien sind unabhängig von PHP hilfreich).
- Cherry-Pick ausführen.
- Konflikte lösen (falls nötig) und den Vorgang abschließen.
- Automatische Tests starten oder zumindest lokal bauen.
- Änderung kurz in der Anwendung verifizieren.
Konflikte beim Cherry-Pick lösen, ohne Chaos zu erzeugen
Konflikte sind nicht automatisch ein schlechtes Zeichen. Sie bedeuten nur: Dieselben Dateien wurden auf Ziel-Branch und im gepickten Commit unterschiedlich verändert. Entscheidend ist ein klarer Ablauf.
Konflikt verstehen: Was ist alt, was ist neu?
Beim Lösen hilft eine einfache Frage: Welche Version soll fachlich gelten? Oft ist die „neue“ Version nicht automatisch richtig, wenn sich der Ziel-Branch seitdem weiterentwickelt hat. Änderungen sollten deshalb nicht blind übernommen, sondern bewusst zusammengesetzt werden.
Abbrechen oder fortsetzen: zwei wichtige Optionen
Wenn sich herausstellt, dass der Commit doch nicht isoliert übertragbar ist, ist Abbrechen völlig legitim. Dann ist meist ein anderer Weg besser (z. B. mehrere Commits picken oder doch mergen).
- Bei zu vielen Konflikten: Cherry-Pick abbrechen und neu planen.
- Bei lösbaren Konflikten: Dateien sauber zusammenführen und Cherry-Pick fortsetzen.
Nach dem Konflikt: unbedingt testen
Ein Konflikt ist nicht nur ein technisches Problem, sondern oft auch ein logisches: Der Code kompiliert zwar, verhält sich aber anders. Darum nach dem Lösen immer prüfen:
- Unit- und Integrationstests laufen durch.
- Relevante Features manuell kurz anklicken.
- Bei APIs: typische Fehlerfälle prüfen (z. B. Validierungsfehler oder fehlende Berechtigungen).
Mehrere Commits übernehmen: Reihenfolge und Grenzen
Oft soll nicht nur ein Commit übernommen werden, sondern eine kleine Serie. Das kann funktionieren, wenn die Commits zusammengehören und in der richtigen Reihenfolge gepickt werden.
Reihenfolge zählt
Wenn Commit B auf Commit A aufbaut, muss erst A und dann B übernommen werden. Das klingt trivial, spart aber viele Konflikte.
Wenn es zu viele Commits werden: bessere Alternativen
Wenn aus „nur schnell ein Commit“ plötzlich 10–20 Commits werden, ist Cherry-Pick meist nicht mehr das richtige Werkzeug. Dann ist ein Merge oder ein gezielter Backport-Branch oft sauberer, weil die Historie konsistent bleibt.
Eine kurze Entscheidungshilfe für den Team-Alltag
-
Einzelner Fix wird dringend in einen anderen Branch gebraucht?
- Ja → Cherry-Pick ist passend, wenn der Commit isoliert ist.
- Nein → eher Merge (wenn ganze Arbeit übernommen wird) oder Rebase (wenn Historie geordnet werden soll).
-
Der Fix hängt an mehreren vorbereitenden Commits?
- Ja → lieber eine kleine Commit-Serie picken oder einen sauberen Merge planen.
- Nein → einzelner Pick bleibt übersichtlich.
-
Der Original-Branch wird später sowieso komplett gemergt?
- Ja → Cherry-Pick nur mit klarer Absprache, sonst drohen doppelte Änderungen.
- Nein → Cherry-Pick ist oft unkompliziert, weil keine spätere „Doppelung“ kommt.
Praxisbeispiel: Hotfix aus Feature-Branch in den Release-Branch
Angenommen, in einem Feature-Branch fällt ein kritischer Fehler auf (z. B. ein falscher Parametername in einer API-Anfrage). Der Fix ist klein und liegt als einzelner Commit vor. Gleichzeitig läuft bereits ein Release-Branch, der stabil bleiben soll.
Typisches Vorgehen:
- Fix-Commit im Feature-Branch identifizieren und sicherstellen, dass er keine weiteren Änderungen voraussetzt.
- Auf den Release-Branch wechseln.
- Cherry-Pick durchführen und Konflikte lösen.
- Automatisierte Tests laufen lassen, besonders rund um die betroffene Stelle.
- Im Pull-Request dokumentieren, dass der Commit „backported“ (zurückportiert) wurde.
So bleibt der Release-Branch schlank, und das Feature kann später weiterentwickelt werden, ohne den Release-Prozess zu blockieren.
Gute Regeln, damit Cherry-Pick langfristig wartbar bleibt
Commit-Nachrichten aussagekräftig halten
Ein Cherry-Pick wird deutlich leichter, wenn Commits klar beschrieben sind. Eine gute Nachricht erklärt kurz: Was wurde geändert und warum? Das hilft beim Wiederfinden und beim Bewerten von Abhängigkeiten.
Cherry-Picks sichtbar machen
In Teams ist Transparenz wichtiger als „schnell fertig“. In Pull-Requests sollte kurz stehen, dass ein Commit per Cherry-Pick übernommen wurde. Das reduziert Überraschungen bei späteren Merges.
Lieber kleine, logische Commits erstellen
Cherry-Pick funktioniert am besten, wenn Commits eine klare Einheit bilden: ein Bugfix, ein Refactor-Schritt, ein Test-Update. Große „Alles-in-einem“-Commits sind schwer zu übertragen, schwer zu reviewen und riskant.
Wer sich zusätzlich für saubere Team-Flows interessiert, findet Hintergrund und Begriffe in Git Branching verstehen – Workflow für Teams ohne Chaos.
Als Merkhilfe: Cherry-Pick ist am stärksten, wenn ein Commit wirklich eigenständig ist. Sobald viele Abhängigkeiten im Spiel sind, sind Merge, Rebase oder ein bewusster Backport-Prozess meist die robustere Wahl.
| Situation | Empfehlung | Warum |
|---|---|---|
| Ein einzelner Bugfix muss sofort in einen anderen Branch | Git Cherry-Pick | Schnell, gezielt, wenig Risiko bei isoliertem Commit |
| Ein kompletter Feature-Branch soll übernommen werden | Merge | Historie bleibt nachvollziehbar, weniger Doppelungen |
| Historie soll aufgeräumt, Commits neu angeordnet werden | Rebase | Besser geeignet als einzelne Picks, wenn Struktur das Ziel ist |
Zusatzwissen, das beim Debuggen nach einem Pick hilft: Wenn nach dem Übertragen plötzlich unerwartete Fehler auftauchen, ist eine saubere Fehleranalyse entscheidend. Für Frontend- und Backend-Denke passt z. B. JavaScript Fehlerbehandlung strukturieren – saubere Try-Catch-Strategien.
Commit-Historie ist nicht nur „Doku für Git“, sondern echte Wartbarkeit: Je klarer sichtbar ist, warum ein Fix wo gelandet ist, desto leichter sind spätere Releases, Reviews und Incident-Fixes.
Für den Alltag hilft außerdem ein Blick auf Merge-Konflikte: Sie sind kein Zeichen von schlechtem Code, aber ein Signal, dass Branches fachlich auseinanderlaufen. Cherry-Pick sollte dann gezielt und mit Tests eingesetzt werden.
Und noch ein praktischer Tipp: Ein Hotfix sollte möglichst klein sein. Je kleiner der Fix, desto geringer das Risiko, beim Pick Nebenwirkungen einzuschleppen.

