Git Cherry-Pick#

git cherry-pick ermöglicht euch, beliebige Git-Commits anhand ihres Hash-Wertes dem aktuellen HEAD anzuhängen. Beim Cherry-Picking wird ein Commit aus einem Branch ausgewählt und auf einen anderen angewendet, z.B.:

$ git checkout 3.10
$ git cherry-pick 61de025
[3.10 b600967] Fix bug #17
 Date: Thu Sep 15 11:17:35 2022 +0200
 1 file changed, 9 insertions(+)

Dabei kann git cherry-pick mit verschiedenen Optionen eingesetzt werden:

--edit, -e

übernimmt nicht die bestehende Commit-Nachricht sondern ermöglicht euch, eine eigene Commit-Nachricht für diesen Cherry-Pick zu erstellen.

--no-commit, -n

erstellt keinen neuen Commit sondern verschiebt die Inhalte des Commits in das Arbeitsverzeichnis.

--signoff, -s

fügt am Ende der Commit-Nachricht eine Signaturzeile mit Signed-off-by hinzu.

git cherry-pick akzeptiert auch Optionen zum Beheben von Merge-Konflikten, darunter --abort, --continue und --quit.

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, könnt ihr zu dem Branch wechseln, in dem die Änderung eigentlich vorgenommen weerden sollte, und den Commit dann per Cherry-Pick auf diesen Branch übertragen.

Beim Cherry-Picking entstehen jedoch üblicherweise doppelte Commits, und in vielen Fällen bevorzugen wir daher eher Git Merges. Dennoch kann sich git cherry-pick für einige Szenarien sehr gut eignen, z.B. für Release-Branches-Workflows.

git range-diff#

git range-diff zeigt die Differenz zwischen zwei Commit-Bereichen an, d.h., welche Commits zwischen diesen Bereichen gleich sind oder sich geändert haben. Dieser Befehl kann z.B. beim Überprüfen helfen, welche Commits mit git cherry-pick auf welche Zweige verteilt wurden.