Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
- 2.50.1 → 2.52.0 keine Änderungen
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 keine Änderungen
-
2.45.0
2024-04-29
- 2.39.4 → 2.44.4 keine Änderungen
-
2.39.3
2023-04-17
- 2.38.1 → 2.39.2 keine Änderungen
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 keine Änderungen
-
2.35.0
2022-01-24
- 2.30.1 → 2.34.8 keine Änderungen
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 keine Änderungen
-
2.27.0
2020-06-01
- 2.23.1 → 2.26.3 keine Änderungen
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 keine Änderungen
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 keine Änderungen
-
2.21.0
2019-02-24
- 2.10.5 → 2.20.5 keine Änderungen
-
2.9.5
2017-07-30
- 2.8.6 keine Änderungen
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.4.12 → 2.5.6 keine Änderungen
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 keine Änderungen
-
2.0.5
2014-12-17
SYNOPSIS
git cherry-pick [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff]
[-S[<keyid>]] <commit>…
git cherry-pick (--continue | --skip | --abort | --quit)
BESCHREIBUNG
Wende für einen oder mehrere bestehende Commits die von jedem einzelnen eingeführte Änderung an und erstelle für jede davon einen neuen Commit. Dies setzt voraus, dass dein Arbeitsbaum sauber ist (keine Änderungen gegenüber dem HEAD-Commit).
Wenn es nicht offensichtlich ist, wie eine Änderung angewendet werden soll, geschieht Folgendes:
-
Der aktuelle Branch und der
HEAD-Zeiger bleiben beim letzten erfolgreich erstellten Commit. -
Der Referenz-Zeiger
CHERRY_PICK_HEADwird so gesetzt, dass er auf den Commit zeigt, der die schwer anzuwendende Änderung eingeführt hat. -
Pfade, auf denen die Änderung sauber angewendet wurde, werden sowohl in der Indexdatei als auch in deinem Arbeitsbaum aktualisiert.
-
Für konfliktbehaftete Pfade zeichnet die Indexdatei bis zu drei Versionen auf, wie im Abschnitt "WAHRER MERGE" von git-merge[1] beschrieben. Die Arbeitsbaumdateien enthalten eine Beschreibung des Konflikts, die von den üblichen Konfliktmarkern <<<<<<< und >>>>>>> umschlossen ist.
-
Keine weiteren Änderungen werden vorgenommen.
Siehe git-merge[1] für einige Hinweise zur Auflösung solcher Konflikte.
OPTIONEN
- <commit>…
-
Zu cherry-pickende Commits. Eine vollständigere Liste der Möglichkeiten, Commits zu benennen, findest du unter gitrevisions[7]. Mengen von Commits können übergeben werden, aber standardmäßig wird keine Traversierung durchgeführt, als ob die Option
--no-walkangegeben wäre; siehe git-rev-list[1]. Beachte, dass die Angabe eines Bereichs alle <commit>…-Argumente an einen einzelnen Revisionsdurchlauf übergibt (siehe ein späteres Beispiel, das maint master..next verwendet). - -e
- --edit
-
Mit dieser Option lässt dich git cherry-pick die Commit-Nachricht vor dem Committen bearbeiten.
- --cleanup=<mode>
-
Diese Option bestimmt, wie die Commit-Nachricht bereinigt wird, bevor sie an die Commit-Mechanismen weitergegeben wird. Siehe git-commit[1] für weitere Details. Insbesondere, wenn dem <mode> ein Wert von
scissorszugewiesen wird, werden Scheren anMERGE_MSGangehängt, bevor sie im Falle eines Konflikts weitergegeben werden. - -x
-
Beim Aufzeichnen des Commits wird eine Zeile angehängt, die "(cherry picked from commit …)" lautet, an die ursprüngliche Commit-Nachricht, um anzugeben, von welchem Commit diese Änderung per Cherry-Pick übernommen wurde. Dies geschieht nur für Cherry-Picks ohne Konflikte. Verwende diese Option nicht, wenn du von deinem privaten Branch per Cherry-Pick übernimmst, da die Informationen für den Empfänger nutzlos sind. Wenn du hingegen von zwei öffentlich sichtbaren Branches per Cherry-Pick übernimmst (z. B. ein Fix für einen Wartungs-Branch für eine ältere Version von einem Entwicklungs-Branch zurückportierst), können diese Informationen nützlich sein.
- -r
-
Früher war es so, dass der Befehl standardmäßig
-xausführte, wie oben beschrieben, und-rdiente dazu, dies zu deaktivieren. Jetzt ist der Standard, dass-xnicht ausgeführt wird, sodass diese Option keine Wirkung hat. - -m <parent-number>
- --mainline <parent-number>
-
Normalerweise kannst du keinen Merge per Cherry-Pick übernehmen, da du nicht weißt, welche Seite des Merges als Hauptlinie betrachtet werden soll. Diese Option gibt die Elternnummer (beginnend bei 1) der Hauptlinie an und ermöglicht es
cherry-pick, die Änderung relativ zum angegebenen Elternteil erneut anzuwenden. - -n
- --no-commit
-
Normalerweise erstellt der Befehl automatisch eine Sequenz von Commits. Dieses Flag wendet die zum Cherry-Picking jedes benannten Commits erforderlichen Änderungen auf deinen Arbeitsbaum und den Index an, ohne einen Commit zu erstellen. Darüber hinaus muss bei Verwendung dieser Option dein Index nicht mit dem HEAD-Commit übereinstimmen. Das Cherry-Picking erfolgt gegen den Anfangszustand deines Index.
Dies ist nützlich, wenn du die Auswirkungen von mehr als einem Commit nacheinander auf deinen Index per Cherry-Pick übernehmen möchtest.
- -s
- --signoff
-
Fügt am Ende der Commit-Nachricht einen
Signed-off-by-Trailer hinzu. Siehe die Optionsignoffin git-commit[1] für weitere Informationen. - -S[<keyid>]
- --gpg-sign[=<keyid>]
- --no-gpg-sign
-
GPG-sign Commits. Das Argument
keyidist optional und standardmäßig die Committer-Identität; wenn es angegeben wird, muss es ohne Leerzeichen an die Option angehängt werden.--no-gpg-signist nützlich, um sowohl die Konfigurationsvariablecommit.gpgSignals auch einen früheren Befehl--gpg-signzu überschreiben. - --ff
-
Wenn der aktuelle HEAD mit dem Elternteil des per Cherry-Pick übernommenen Commits übereinstimmt, wird ein Fast-Forward zu diesem Commit durchgeführt.
- --allow-empty
-
Standardmäßig schlägt das Cherry-Picking eines leeren Commits fehl, was darauf hinweist, dass ein expliziter Aufruf von
gitcommit--allow-emptyerforderlich ist. Diese Option überschreibt dieses Verhalten und erlaubt die automatische Beibehaltung leerer Commits bei einem Cherry-Pick. Beachte, dass bei aktivierter Option "--ff" leere Commits, die die "Fast-Forward"-Anforderung erfüllen, auch ohne diese Option beibehalten werden. Beachte auch, dass die Verwendung dieser Option nur ursprünglich leere Commits beibehält (d. h. der Commit hat denselben Baum wie sein Elternteil aufgezeichnet). Commits, die aufgrund eines vorherigen Commits leer werden, führen dazu, dass das Cherry-Picking fehlschlägt. Um die Einbeziehung dieser Commits zu erzwingen, verwende--empty=keep. - --allow-empty-message
-
Standardmäßig schlägt das Cherry-Picking eines Commits mit einer leeren Nachricht fehl. Diese Option überschreibt dieses Verhalten und erlaubt das Cherry-Picking von Commits mit leeren Nachrichten.
- --empty=(drop|keep|stop)
-
Wie mit Commits umgegangen werden soll, die per Cherry-Pick übernommen werden und redundant zu bereits vorhandenen Änderungen in der aktuellen Historie sind.
Beachte, dass
--empty=dropund--empty=stopnur angeben, wie mit einem Commit umgegangen werden soll, der nicht ursprünglich leer war, sondern durch einen vorherigen Commit leer geworden ist. Commits, die ursprünglich leer waren, führen weiterhin dazu, dass das Cherry-Picking fehlschlägt, es sei denn, eine der Optionen--empty=keepoder--allow-emptywird angegeben. - --keep-redundant-commits
-
Veraltete Synonym für
--empty=keep. - --strategy=<strategy>
-
Verwendet die angegebene Merge-Strategie. Sollte nur einmal verwendet werden. Siehe den Abschnitt MERGE-STRATEGIEN in git-merge[1] für Details.
- -X<option>
- --strategy-option=<option>
-
Übergibt die strategie-spezifische Merge-Option an die Merge-Strategie. Details finden Sie in git-merge[1].
--rerere-autoupdate--no-rerere-autoupdate-
Nachdem der rerere-Mechanismus eine aufgezeichnete Auflösung für den aktuellen Konflikt wiederverwendet hat, um die Dateien im Arbeitsbaum zu aktualisieren, erlauben Sie ihm auch, den Index mit dem Ergebnis der Auflösung zu aktualisieren.
--no-rerere-autoupdateist eine gute Möglichkeit, zu überprüfen, wasrereregetan hat, und potenzielle Fehlmerges zu erkennen, bevor das Ergebnis mit einem separatengitaddin den Index übernommen wird.
SEQUENCER-UNTERBEFEHLE
- --continue
-
Führe die laufende Operation mit den Informationen in
.git/sequencerfort. Kann verwendet werden, um nach der Auflösung von Konflikten bei einem fehlgeschlagenen Cherry-Pick oder Revert fortzufahren. - --skip
-
Überspringe den aktuellen Commit und fahre mit dem Rest der Sequenz fort.
- --quit
-
Vergiss die aktuelle laufende Operation. Kann verwendet werden, um den Sequenzer-Status nach einem fehlgeschlagenen Cherry-Pick oder Revert zu löschen.
- --abort
-
Brich die Operation ab und kehre zum Zustand vor der Sequenz zurück.
BEISPIELE
gitcherry-pickmaster-
Wende die von dem Commit an der Spitze des master-Branches eingeführte Änderung an und erstelle einen neuen Commit mit dieser Änderung.
gitcherry-pick..mastergitcherry-pick^HEADmaster-
Wende die von allen Commits, die Vorfahren von master, aber nicht von HEAD sind, eingeführten Änderungen an, um neue Commits zu erstellen.
gitcherry-pickmaintnext^mastergitcherry-pickmaintmaster..next-
Wende die von allen Commits, die Vorfahren von maint oder next sind, aber nicht von master oder einem seiner Vorfahren, eingeführten Änderungen an, um neue Commits für jede neue Änderung zu erstellen. Beachte, dass letzteres nicht
maintund alles dazwischenmasterundnextbedeutet; insbesondere wirdmaintnicht verwendet, wenn es inmasterenthalten ist. gitcherry-pickmaster~4master~2-
Wende die von den fünften und dritten letzten Commits, auf die master zeigt, eingeführten Änderungen an und erstelle 2 neue Commits mit diesen Änderungen.
gitcherry-pick-nmaster~1next-
Wende die von dem vorletzten Commit, auf den master zeigt, und von dem letzten Commit, auf den next zeigt, eingeführten Änderungen auf den Arbeitsbaum und den Index an, aber erstelle keine Commits mit diesen Änderungen.
gitcherry-pick--ff..next-
Wenn die Historie linear ist und HEAD ein Vorfahre von next ist, aktualisiere den Arbeitsbaum und bewege den HEAD-Zeiger, um next zu entsprechen. Andernfalls wende die von den Commits, die in next, aber nicht in HEAD sind, eingeführten Änderungen auf den aktuellen Branch an und erstelle für jede neue Änderung einen neuen Commit.
gitrev-list--reversemaster--README|gitcherry-pick-n--stdin-
Wende die von allen Commits auf dem master-Branch, die README betrafen, eingeführten Änderungen auf den Arbeitsbaum und den Index an, sodass das Ergebnis überprüft und gegebenenfalls zu einem einzigen neuen Commit zusammengefasst werden kann.
Die folgende Sequenz versucht, einen Patch zurückzuportieren, schlägt fehl, weil der Code, auf den der Patch angewendet wird, zu stark verändert wurde, und versucht es dann erneut, diesmal mit größerer Sorgfalt beim Abgleichen von Kontextzeilen.
$ git cherry-pick topic^ (1) $ git diff (2) $ git cherry-pick --abort (3) $ git cherry-pick -Xpatience topic^ (4)
-
Wende die Änderung an, die von
gitshowtopic^angezeigt würde. In diesem Beispiel lässt sich der Patch nicht sauber anwenden, sodass Informationen über den Konflikt in den Index und den Arbeitsbaum geschrieben werden und kein neuer Commit daraus resultiert. -
Zusammenfassen der zu abgleichenden Änderungen
-
Brich den Cherry-Pick ab. Mit anderen Worten, kehre zum Zustand vor dem Cherry-Pick zurück und behalte alle lokalen Änderungen bei, die du im Arbeitsbaum hattest.
-
Versuche, die von
topic^eingeführte Änderung erneut anzuwenden, und nimm dir zusätzliche Zeit, um Fehler aufgrund von falsch übereinstimmenden Kontextzeilen zu vermeiden.
GIT
Teil der git[1] Suite