Vor kurzem wurde ich zu cherry-pick
einem Commit aufgefordert .
Was bedeutet es also, ein Commit in Git zu pflücken? Wie machst du das?
git
cherry-pick
git-cherry-pick
Rahul
quelle
quelle
Antworten:
Cherry Picking in Git bedeutet, ein Commit aus einem Zweig auszuwählen und auf einen anderen anzuwenden.
Dies steht im Gegensatz zu anderen Methoden wie
merge
und,rebase
die normalerweise viele Commits auf einen anderen Zweig anwenden.Stellen Sie sicher, dass Sie sich in dem Zweig befinden, auf den Sie das Commit anwenden möchten.
Führen Sie Folgendes aus:
NB:
Wenn Sie aus einer öffentlichen Filiale auswählen, sollten Sie die Verwendung in Betracht ziehen
Dadurch wird eine standardisierte Festschreibungsnachricht generiert. Auf diese Weise können Sie (und Ihre Mitarbeiter) weiterhin den Ursprung des Commits verfolgen und künftige Zusammenführungskonflikte vermeiden.
Wenn Sie dem Commit Notizen beigefügt haben, folgen diese nicht dem Cherry-Pick. Um sie auch zu bringen, müssen Sie verwenden:
Zusätzliche Links:
quelle
git cherry-pick -x <commit-hash>
. Dadurch wird eine standardisierte Festschreibungsnachricht generiert. Auf diese Weise können Sie (und Ihre Mitarbeiter) weiterhin den Ursprung des Commits verfolgen und künftige Zusammenführungskonflikte vermeiden.git notes copy <from> <to>
, um sie auch zu bringen."cherry-pick commit applies the changes introduced by the named commit on the current branch"
Most vorgenommen hat ppl neigen dazu, Commit als Änderungen zu betrachten (wie svn was iirc war), aber es ist nicht so, dass sich jedes Commit auf den vollständigen Arbeitsbaum bezieht. Obwohl dies in diesem Fall keinen Unterschied macht, kann es helfen zu verstehen, warum Git so funktioniert.Dieses Zitat stammt aus; Versionskontrolle mit Git (Wirklich tolles Buch, ich empfehle Ihnen, es zu kaufen, wenn Sie an Git interessiert sind)
Bearbeiten: Da diese Antwort immer noch Eindruck macht, möchte ich ein sehr schönes Video-Tutorial dazu hinzufügen:
Youtube: Einführung in Git Cherry-Pick
Vor:
nach:
quelle
Cherry Picking in Git wurde entwickelt, um ein Commit von einem Zweig auf einen anderen Zweig anzuwenden. Es kann getan werden, wenn Sie z. einen Fehler gemacht und eine Änderung in einen falschen Zweig begangen haben, aber nicht den gesamten Zweig zusammenführen möchten. Sie können nur zB. Setzen Sie das Commit zurück und wählen Sie es in einem anderen Zweig aus.
Um es zu verwenden, brauchen Sie nur
git cherry-pick hash
, wohash
sich ein Commit-Hash von einem anderen Zweig befindet.Das vollständige Verfahren finden Sie unter: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
quelle
Kurzes Beispiel für eine Situation, in der Sie Kirschbaum brauchen
JETZT : Sie reparieren etwas in Release1 . Natürlich brauchen Sie diesen Fix auch im Master . Und das ist ein typischer Anwendungsfall für die Kirschernte. Cherry Pick in diesem Szenario bedeutet also, dass Sie ein Commit aus dem Release1- Zweig übernehmen und in den Master- Zweig aufnehmen.
quelle
Cherry-Pick ist eine Git-Funktion. Wenn jemand bestimmte Commits in einem Zweig für einen Zielzweig festschreiben möchte, wird Cherry-Pick verwendet.
Git Cherry-Pick-Schritte sind wie folgt.
Hier ist die Festschreibungs-ID die Aktivitäts-ID eines anderen Zweigs.
Besuchen Sie https://git-scm.com/docs/git-cherry-pick
quelle
Ich habe Schritt für Schritt Illustrationen vorbereitet, was Cherry-Pick macht - und eine Animation dieser Illustrationen (gegen Ende).
(wir werden ein Kirschpflücken des Commits
L
aus der Filiale machenfeature
):git cherry-pick feature~2
(
feature~2
ist das 2. Festschreiben vorfeature
, dh das FestschreibenL
):git cherry-pick feature~2
):Das gleiche animierte:
Hinweis:
Das Commit
L'
ist aus Sicht des Benutzers (Commit = Snapshot) die genaue Kopie des CommitsL
.Technisch (intern) handelt es sich um ein neues, anderes Commit (da z. B.
L
ein Zeiger aufK
(als übergeordnetes Element) und ein Zeiger auf (L'
enthältE
).quelle
Sie können sich vorstellen, ob ein Kirschpickel einem Rebase ähnelt oder eher wie ein Rebase verwaltet wird. Damit meine ich, dass ein vorhandenes Commit verwendet und neu generiert wird, wobei als Ausgangspunkt der Leiter des Zweigs verwendet wird, in dem Sie sich gerade befinden.
A
rebase
nimmt ein Commit mit einem übergeordneten X und generiert das Commit neu, als hätte es tatsächlich ein übergeordnetes Y, und genau dascherry-pick
tut a.Bei Cherry Pick geht es mehr darum, wie Sie die Commits auswählen. Mit
pull
(rebase) regeneriert git implizit Ihre lokalen Commits zusätzlich zu dem, was in Ihren Zweig gezogen wird.cherry-pick
Wählen Sie jedoch explizit einige Commits aus und generieren Sie sie implizit über Ihrem aktuellen Zweig neu.Die Art und Weise, wie Sie es tun, ist also unterschiedlich, aber unter der Haube sind sie sehr ähnliche Vorgänge - die Regeneration von Commits.
quelle
cherry-pick
sich das Verhalten so verhält, wenn der Zielzweig später wieder mit dem Quellzweig zusammengeführt wird. Danke mein Herr.Es ist wie Kopieren (von irgendwoher) und Einfügen (von irgendwoher), aber für bestimmte Commits.
Wenn Sie beispielsweise einen Hotfix durchführen möchten, können Sie die
cherry-pick
Funktion verwenden.Tun Sie dies
cherry-pick
in einem Entwicklungszweig, undmerge
dieser verpflichtet sich zu einem Release-Zweig. Führen Sie ebenfalls einencherry-pick
von einem Release-Zweig zum Master aus. Voilaquelle
Wenn Sie mit einem Entwicklerteam an einem Projekt arbeiten, kann das Verwalten der Änderungen zwischen mehreren Git-Zweigen zu einer komplexen Aufgabe werden. Manchmal möchten Sie nicht einen ganzen Zweig in einen anderen zusammenführen und müssen nur ein oder zwei bestimmte Commits auswählen. Dieser Vorgang wird als "Kirschernte" bezeichnet.
Sie haben einen großartigen Artikel zum Thema Kirschernte gefunden. Weitere Informationen finden Sie unter: https://www.previousnext.com.au/blog/intro-cherry-picking-git
quelle
Wenn Sie ohne Festschreibungs-IDs zusammenführen möchten, können Sie diesen Befehl verwenden
Mit dem obigen Befehl werden die letzten drei Commits des Masters von 1 bis 3 zusammengeführt
Wenn Sie dies für ein einzelnes Commit tun möchten, entfernen Sie einfach die letzte Option
Auf diese Weise führen Sie das dritte Commit ab dem Ende des Masters zusammen.
quelle
Es wird ein bestimmtes Commit auf Ihre aktuelle Niederlassung angewendet.
Das heisst :
Beispiel: Betrachten Sie Commit A.
begehen B.
Wenn Sie Commit B für einen anderen Zweig auswählen , erhalten Sie Folgendes:
Da Commit B newFileB und main enthält , aber kein newFileA , was zu einem Fehler führt, sollten Sie es mit Vorsicht verwenden.
quelle
Auszug aus den offiziellen Dokumenten:
Weiterlesen...
quelle