Git cherry pick ist ein einfaches, aber leistungsfähiges Tool, mit dem Sie Commits selektiv von einem Branch auf einen anderen übertragen können.
Git cherry pick ist ein einfaches, aber leistungsstarkes Tool, mit dem Sie Commits selektiv von einem Branch in einen anderen übertragen können. Sie können es verwenden, wenn Sie nicht einen ganzen Branch in den Master-Branch mergen möchten, aber dennoch Änderungen aus einem Feature-Branch einbeziehen möchten.
Was ist Git Cherry Pick und wie funktioniert es?
In Git sind Commits die Einheiten, die Änderungen im Laufe der Zeit verfolgen. Jeder Commit kann eine Fehlerbehebung, eine neue Funktion oder einen Teil einer größeren Lösung darstellen. Sie können sich Commits als eine verknüpfte Liste vorstellen, die in die Vergangenheit verweist. Immer wenn Sie den HEAD Ihres Zweigs ändern, rekonstruiert Git Ihre lokalen Verzeichnisdateien, indem alle Commits bis zum Anfang berücksichtigt werden.
Dies ist natürlich eine Vereinfachung, und Git speichert Commits technisch gesehen nicht als einfache Änderungslisten , sondern verwendet dateibasierte Blobs, aber das Prinzip ist dasselbe.
Die Dinge werden komplizierter, wenn Zweige beteiligt sind. Oft dauert die Arbeit an einer Funktion mehrere Tage oder Wochen. Anstatt das Hauptrepository zu überladen, wird es in einen separaten Funktionszweig verschoben, und dann wird der Code überprüft und wieder zusammengeführt. Beim Zusammenführen wird im Grunde dieser Commit-Verlauf verzweigt, sodass der gesamte Funktionszweig einbezogen wird, wenn Git seine Arbeit erledigt.
Was aber, wenn Sie einige Dinge zusammenführen möchten, aber noch nicht den gesamten Zweig einbeziehen möchten? Sie können nicht
In diesem Fall.
Hier git cherry pick wird es nützlich. Es tut, was der Name schon sagt: Es nimmt ein einzelnes Commit aus dem Feature-Branch, wählt es einzeln aus und wendet es auf den Master-Branch an oder umgekehrt. Dadurch wird das Commit kopiert, sodass auf dem Ziel-Branch ein brandneues Commit vorhanden ist.
Beachten Sie, dass es keine echte „Linie“ gibt, die das neue Commit im Master-Zweig mit dem alten Commit verbindet. Das neue, ausgewählte Commit, das im Master erstellt wurde, verweist überhaupt nicht auf das Quell-Commit, das Commit wird einfach kopiert. Git kümmert sich darum, wenn Sie die Zweige wieder zusammenführen, da die Commits als Kopien voneinander angesehen werden.
Tatsächlich wird das Commit auf den neuen Zweig „übertragen“, Sie müssen jedoch bedenken, dass das alte Commit weiterhin auf den Feature-Zweig angewendet wird. Sie sollten das Quell-Commit jedoch nicht rückgängig machen, da dies beim späteren Zusammenführen zu Problemen führen würde.
Warum Cherry Pick?
Dafür gibt es einige Anwendungsfälle. Vielleicht arbeiten Sie an einer Funktion, die noch nicht zur Veröffentlichung bereit ist, aber Sie haben einen Fehler im Funktionszweig behoben, den Sie in Ihre wöchentliche Veröffentlichungsversion aufnehmen möchten. Sie können Cherry Pick verwenden, um den Bugfix auf Master zu kopieren und ihn frühzeitig bereitzustellen.
Oder vielleicht haben Sie mehrere Zweige für Produktion und Entwicklung und möchten eine dringende Fehlerbehebung von der Produktion in die Entwicklung kopieren. Auch das ist mit Cherry Pick möglich.
Oder Sie haben vielleicht versehentlich einen Commit in den falschen Branch gemacht. Sie können git cherry pick ihn mit in den richtigen Branch kopieren und dann
um dieses Commit rückgängig zu machen (vorausgesetzt, es befindet sich am KOPF des Zweigs).
Verwenden von Git Cherry Pick
Wenn Sie erst einmal verstanden haben, was Sie tun, git cherry pick ist die Anwendung ganz einfach.
Der einfachste Weg, den Commit-Verlauf von Git auf der Befehlszeile anzuzeigen, ist der folgende Befehl, der alle Commits anzeigt, jedoch mit einem Branch- und Merge-Verlauf, der für die Verwendung von Cherry Pick entscheidend ist:
Anschließend können Sie einfach den SHA1-Hash des Commits kopieren und den Cherry Pick ausführen:
Beachten Sie, dass Sie auch mehrere Commits gleichzeitig auswählen können. Übergeben Sie dazu einfach mehrere Hashes Google One.
git cherry pick hat einige nützliche Optionen:
- –no-commitwendet nur die Änderungen auf Ihr Verzeichnis an. Sie müssen die Vorbereitung und das Commit manuell durchführen.
- –edit ermöglicht Ihnen, die Commit-Nachricht zu ändern.
- -x fügt die Meldung „Cherry Picked aus Commit: …“ hinzu.
Wenn Sie einen GUI-basierten Git-Client wie Fork oder GitKraken verwenden (was wir sehr empfehlen), können Sie natürlich einfach mit der rechten Maustaste auf das Commit klicken und es auswählen: