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.1.4 → 2.52.0 keine Änderungen
-
2.0.5
2014-12-17
BESCHREIBUNG
Bestimmt, ob Commits im Bereich <head>..<upstream> vorhanden sind, die äquivalent zu denen im Bereich <limit>..<span class="hover-term" data-term="head"><head></span> sind.
Der Äquivalenztest basiert auf dem Diff, nachdem Leerzeichen und Zeilennummern entfernt wurden. git-cherry erkennt daher, wann Commits durch git-cherry-pick[1], git-am[1] oder git-rebase[1] "kopiert" wurden.
Gibt die SHA1-Hashes jedes Commits im Bereich <limit>..<span class="hover-term" data-term="head"><head></span> aus, mit einem Präfix - für Commits, die ein Äquivalent in <upstream> haben, und + für Commits, die keines haben.
OPTIONEN
- -v
-
Zeigt die Commit-Betreffzeilen neben den SHA1-Hashes an.
- <upstream>
-
Upstream-Branch, in dem nach äquivalenten Commits gesucht werden soll. Standardmäßig der Upstream-Branch von HEAD.
- <head>
-
Arbeits-Branch; Standardmäßig HEAD.
- <limit>
-
Berichtet keine Commits bis einschließlich (und einschließlich) limit.
BEISPIELE
Patch-Workflows
git-cherry wird häufig in patch-basierten Workflows (siehe gitworkflows[7]) verwendet, um festzustellen, ob eine Reihe von Patches vom Upstream-Maintainer angewendet wurde. In einem solchen Workflow könnten Sie einen Topic-Branch wie folgt erstellen und senden:
$ git checkout -b topic origin/master # work and create some commits $ git format-patch origin/master $ git send-email ... 00*
Später können Sie prüfen, ob Ihre Änderungen angewendet wurden, indem Sie (immer noch auf topic) Folgendes ausführen:
$ git fetch # update your notion of origin/master $ git cherry -v
Konkretes Beispiel
In einer Situation, in der topic aus drei Commits bestand und der Maintainer zwei davon angewendet hat, könnte die Situation wie folgt aussehen:
$ git log --graph --oneline --decorate --boundary origin/master...topic * 7654321 (origin/master) upstream tip commit [... snip some other commits ...] * cccc111 cherry-pick of C * aaaa111 cherry-pick of A [... snip a lot more that has happened ...] | * cccc000 (topic) commit C | * bbbb000 commit B | * aaaa000 commit A |/ o 1234567 branch point
In solchen Fällen zeigt git-cherry eine prägnante Zusammenfassung dessen, was noch angewendet werden muss:
$ git cherry origin/master topic - cccc000... commit C + bbbb000... commit B - aaaa000... commit A
Hier sehen wir, dass die Commits A und C (markiert mit -) aus Ihrem topic-Branch gelöscht werden können, wenn Sie ihn auf origin/master neu basisen, während der Commit B (markiert mit +) beibehalten werden muss, damit er zur Anwendung auf origin/master gesendet wird.
Verwendung eines Limits
Das optionale <limit> ist nützlich in Fällen, in denen Ihr Thema auf anderer Arbeit basiert, die nicht im Upstream enthalten ist. Aufbauend auf dem vorherigen Beispiel könnte dies so aussehen:
$ git log --graph --oneline --decorate --boundary origin/master...topic * 7654321 (origin/master) upstream tip commit [... snip some other commits ...] * cccc111 cherry-pick of C * aaaa111 cherry-pick of A [... snip a lot more that has happened ...] | * cccc000 (topic) commit C | * bbbb000 commit B | * aaaa000 commit A | * 0000fff (base) unpublished stuff F [... snip ...] | * 0000aaa unpublished stuff A |/ o 1234567 merge-base between upstream and topic
Durch die Angabe von base als Limit können Sie vermeiden, Commits zwischen base und topic aufzulisten.
$ git cherry origin/master topic base - cccc000... commit C + bbbb000... commit B - aaaa000... commit A
GIT
Teil der git[1] Suite