git cherry-pick
ist ein leistungsfähiger Befehl, der es ermöglicht, beliebige Git-Commits per Referenz auszuwählen und an den aktuellen Arbeits-HEAD anzuhängen. Beim Cherry Picking wird ein Commit aus einem Zweig ausgewählt und auf einen anderen angewendet. git cherry-pick
kann nützlich sein, um Änderungen rückgängig zu machen. Angenommen, ein Commit wird versehentlich im falschen Zweig durchgeführt. Sie können zum richtigen Zweig wechseln und den Commit dorthin verschieben, wo er hingehört.
Wann sollte man Git Cherry Pick verwenden
git cherry-pick
ist ein nützliches Werkzeug, aber nicht immer die beste Praxis. Cherry Picking kann zu doppelten Commits führen und in vielen Szenarien, in denen Cherry Picking funktionieren würde, werden stattdessen traditionelle Merges bevorzugt. In diesem Sinne ist git cherry-pick
ein praktisches Werkzeug für einige Szenarien…
Zusammenarbeit im Team
Es kommt oft vor, dass einzelne Mitglieder eines Teams am gleichen Code arbeiten. Vielleicht hat eine neue Produktfunktion eine Backend- und eine Frontend-Komponente. Möglicherweise gibt es einen gemeinsamen Code zwischen den beiden Produktbereichen. Vielleicht erstellt der Backend-Entwickler eine Datenstruktur, die auch vom Frontend genutzt werden muss. Der Frontend-Entwickler könnte git cherry-pick
verwenden, um den Commit zu wählen, in dem diese hypothetische Datenstruktur erstellt wurde. Dieser Pick würde es dem Frontend-Entwickler ermöglichen, mit seiner Seite des Projekts fortzufahren.
Bug Hotfixes
Wenn ein Bug entdeckt wird, ist es wichtig, den Endbenutzern so schnell wie möglich einen Fix zu liefern. Ein Beispielszenario: Ein Entwickler hat mit der Arbeit an einer neuen Funktion begonnen. Während der Entwicklung dieser neuen Funktion wird ein bereits vorhandener Fehler entdeckt. Der Entwickler erstellt einen expliziten Commit, der diesen Fehler behebt. Dieser neue Patch-Commit kann direkt auf den master
-Zweig übertragen werden, um den Fehler zu beheben, bevor er sich auf weitere Benutzer auswirkt.
Änderungen rückgängig machen und verlorene Commits wiederherstellen
Manchmal kann ein feature
-Zweig veralten und nicht in master
zusammengeführt werden. Manchmal wird ein Pull-Request geschlossen, ohne zusammengeführt zu werden. Git verliert diese Commits nie und durch Befehle wie git log
und git reflog
können sie gefunden und wieder zum Leben erweckt werden.
Wie benutzt man Git Cherry Pick
Um zu demonstrieren, wie man git cherry-pick
benutzt, nehmen wir an, wir haben ein Repository mit dem folgenden Branch-Status:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
Die Benutzung ist einfach und kann wie folgt ausgeführt werden:
git cherry-pick commitSha
In diesem Beispiel ist commit
Sha eine Commit-Referenz. Sie können eine Commit-Referenz finden, indem Sie git log
verwenden. In diesem Beispiel, das wir konstruiert haben, nehmen wir an, wir wollten Commit `f` in master
verwenden. Zuerst stellen wir sicher, dass wir auf dem Zweig master
arbeiten.
git checkout master
Dann führen wir den Cherry-Pick mit folgendem Befehl aus:
git cherry-pick f
Nach der Ausführung wird unsere Git-History wie folgt aussehen:
a - b - c - d - f Master
\
e - f - g Feature
Der Commit f wurde erfolgreich in den Master-Branch gepickt
Beispiele für git cherry pick
git cherry pick
können auch einige Ausführungsoptionen übergeben werden.
-edit
Die Übergabe der Option -edit
veranlasst git, nach einer Commit-Nachricht zu fragen, bevor die Cherry-Pick-Operation ausgeführt wird
--no-commit
Die Option --no-commit
führt den Cherry Pick aus, aber anstatt einen neuen Commit zu machen, wird der Inhalt des Ziel-Commits in das Arbeitsverzeichnis des aktuellen Zweigs verschoben.
--signoff
Die Option --signoff
fügt eine ’signoff‘-Signaturzeile am Ende der Cherry-Pick-Commit-Nachricht hinzu
Zusätzlich zu diesen hilfreichen Optionen akzeptiert git cherry-pick
auch eine Vielzahl von Merge-Strategie-Optionen. Erfahren Sie mehr über diese Optionen in der Dokumentation von git merge strategies.
Zusätzlich akzeptiert git cherry-pick auch die Eingabe von Optionen zur Lösung von Konflikten beim Zusammenführen, dazu gehören die Optionen: --abort --continue
und --quit
Diese Optionen werden in Bezug auf git merge und git rebase ausführlicher behandelt.
Zusammenfassung
Cherry Picking ist ein mächtiger und bequemer Befehl, der in einigen Szenarien unglaublich nützlich ist. Cherry Picking sollte nicht anstelle von git merge oder git rebase missbraucht werden. Der Befehl git log ist erforderlich, um die zu entkernenden Übertragungen zu finden.