Illustration: Git Cherry-Pick

Git Cherry-Pick

git cherry-pick ist ein sehr praktischer Befehl, der es dir ermöglicht, beliebige Git-Commits anhand einer Referenz auszuwählen und an den aktuellen Arbeits-HEAD anzuhängen. Beim Cherry-Picking wird ein Commit aus einem Branch ausgewählt und auf einen anderen angewendet. git cherry-pick kann hilfreich sein, um Änderungen rückgängig zu machen. Wenn beispielsweise ein Commit versehentlich für den falschen Branch durchgeführt wurde, kannst du zum richtigen Branch wechseln und den Commit per Cherry-Pick auf diesen Branch übertragen.

Wann solltest du Git Cherry-Pick verwenden?

git cherry-pick ist ein durchaus nützlicher Befehl, aber nicht in jedem Fall die beste Wahl. Beim Cherry-Picking können doppelte Commits entstehen und in vielen Szenarien, in denen Cherry-Picking funktionieren würde, werden stattdessen herkömmliche Merges bevorzugt. Dennoch eignet sich git cherry-pick für einige Szenarien sehr gut.

Zusammenarbeit im Team

In Teams arbeiten oft mehrere Mitglieder am selben oder mit demselben Code. Ein neues Produkt-Feature hat vielleicht eine Back-end- und eine Front-end-Komponente. Möglicherweise wird Code in zwei Produktbereichen gemeinsam genutzt. Unter Umständen erstellt der Back-end-Entwickler eine Datenstruktur, die auch am Front-end benötigt wird. Der Front-end-Entwickler kann dann mit git cherry-pick den Commit auswählen, mit dem diese hypothetische Datenstruktur erstellt wurde. Danach kann er mit seinem Teil des Projekts fortfahren.

Hotfixes für Bugs

Wenn ein Bug gefunden wird, muss die entsprechende Korrektur so schnell wie möglich zu den Endbenutzern gelangen. Angenommen, ein Entwickler hat begonnen, an einem neuen Feature zu arbeiten. Während der Entwicklung findet er einen Bug, der schon zuvor vorhanden war. Er erstellt einen expliziten Commit als Patch für diesen Bug. Der neue Patch-Commit kann per Cherry-Pick direkt auf den master-Branch angewendet werden, um den Bug zu beheben, bevor er sich auf noch mehr Benutzer auswirkt.

Rückgängigmachen von Änderungen und Wiederherstellen verloren gegangener Commits

Manchmal wird ein feature Branch vergessen und nicht in den master gemergt. Es kann auch vorkommen, dass eine Pull-Anfrage ohne Merge einfach geschlossen wird. In Git gehen diese Commits jedoch nicht verloren. Mit Befehlen wie git log und git reflog können sie wiedergefunden und per Cherry-Pick reaktiviert werden.

Wie kannst du Git Cherry-Pick verwenden?

Um die Verwendung von git cherry-pick zu demonstrieren, gehen wir davon aus, dass wir ein Repository mit folgendem Branch-Zustand haben:

    a - b - c - d   Master
         \
           e - f - g Feature

git cherry-pick ist in der Verwendung unkompliziert. Ein Beispiel könnte folgendermaßen aussehen:

git cherry-pick commitSha

In diesem Beispiel ist "commitSha" eine Commit-Referenz. Du kannst mit git log nach Commit-Referenzen suchen. In diesem Beispiel möchten wir den Commit "f" im master verwenden. Zunächst müssen wir sicherstellen, dass wir uns im master-Branch befinden.

git checkout master

Dann führen wir mit folgendem Befehl den Cherry-Pick durch:

git cherry-pick f

Nach der Ausführung sieht der Git-Verlauf so aus:

    a - b - c - d - f   Master
         \
           e - f - g Feature

Der f-Commit wurde per Cherry-Pick erfolgreich auf den Feature Branch angewendet.

Beispiele für Git Cherry-Pick

git cherry pick kann auch in Kombination mit verschiedenen Ausführungsoptionen eingesetzt werden.

-edit

Dank der Option -edit fragt Git vor dem Anwenden des Cherry-Picks nach einer Commit-Nachricht.

--no-commit

Mit der Option --no-commit wird der Cherry-Pick ebenfalls durchgeführt, aber es wird kein neuer Commit erstellt, sondern die Inhalte des Ziel-Commits werden in das Arbeitsverzeichnis des aktuellen Branchs verschoben.

--signoff

Mit der Option --signoff wird am Ende der Cherry-Pick-Commit-Nachricht eine "Signoff"-Signaturzeile hinzugefügt.

Neben diesen praktischen Optionen sind bei git cherry-pick auch verschiedene Merge-Strategieoptionen verfügbar. Mehr über diese Optionen erfährst du in der Dokumentation zu Git-Merge-Strategien.

Git Cherry-Pick akzeptiert auch Optionen zum Beheben von Merge-Konflikten, darunter die Optionen --abort --continue und --quit. Diese Optionen werden im Zusammenhang mit git merge und git rebase eingehender behandelt.

Zusammenfassung

Git Cherry-Pick ist ein hilfreicher und praktischer Befehl, der in einigen Szenarien viele Vorteile hat. Er sollte jedoch nicht verwendet werden, wenn eigentlich git merge oder git rebase erforderlich sind. Mit dem Befehl git log kannst du nach den Commits für den Cherry-Pick suchen.