Suche…


Bemerkungen

Viele Git-Befehle verwenden Revisionsparameter als Argumente. Je nach Befehl bezeichnen sie ein bestimmtes Commit oder für Befehle, die den Revisionsgraphen durchlaufen (z. B. git-log (1) ), alle Commits, die von diesem Commit aus erreichbar sind. Sie werden in der Syntaxbeschreibung normalerweise als <commit> , <rev> oder <revision> .

Die Referenzdokumentation für die Git-Revisions-Syntax ist die Manpage gitrevisions (7) .

Noch fehlt auf dieser Seite:

  • [_] Ausgabe von git describe , z. B. v1.7.4.2-679-g3bee7fb
  • [_] @ als Abkürzung für HEAD
  • [_] @{-<n>} , z. B. @{-1} und - Bedeutung @{-1}
  • [_] <branchname>@{push}
  • [_] <rev>^@ für alle Eltern von <rev>

Benötigt separate Dokumentation:

  • [_] Bezieht sich auf Blobs und Bäume im Repository und im Index: <rev>:<path> und :<n>:<path> Syntax
  • [_] Revisionsbereiche wie A..B , A...B , B ^A , A^1 und Revisionslimitierung wie -<n> , --since

Revision nach Objektname angeben

$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19

Sie können eine Revision (oder in Wahrheit ein beliebiges Objekt: Tag, Baum, dh Verzeichnisinhalt, Blob, dh Dateiinhalt) mithilfe des SHA-1-Objektnamens angeben, entweder einer vollständigen 40-Byte-Hexadezimalzeichenfolge oder einer für das Repository eindeutigen Teilzeichenfolge.

Symbolische Referenznamen: Zweige, Tags, Fernverfolgungszweige

$ git log master    # specify branch
$ git show v1.0     # specify tag
$ git show HEAD     # specify current branch
$ git show origin   # specify default remote-tracking branch for remote 'origin'

Sie können die Revision mithilfe eines symbolischen Referenznamens angeben, der Verzweigungen (z. B. 'master', 'next', 'maint'), Tags (z. B. 'v1.0', 'v0.6.3-rc2'), remote- enthält. Verfolgung von Zweigen (z. B. 'Ursprung', 'Ursprung / Master') und Sonderreferenzen wie 'HEAD' für den aktuellen Zweig.

Wenn der symbolische Referenzname mehrdeutig ist, z. B. wenn Sie sowohl Zweig als auch Tag mit dem Namen 'fix' haben (Zweig und Tag mit demselben Namen werden nicht empfohlen), müssen Sie die Art der Referenz angeben, die Sie verwenden möchten:

$ git show heads/fix      # or 'refs/heads/fix', to specify branch
$ git show tags/fix       # or 'refs/tags/fix', to specify tag

Die Standardversion: HEAD

$ git show         # equivalent to 'git show HEAD'

'HEAD' benennt das Commit, auf dem Sie die Änderungen im Arbeitsbaum vorgenommen haben, und ist normalerweise der symbolische Name für den aktuellen Zweig. Viele (aber nicht alle) Befehle, die den Revisionsparameter übernehmen, sind standardmäßig auf 'HEAD' gesetzt, wenn sie fehlen.

Reflog-Referenzen: @ { }

$ git show @{1}            # uses reflog for current branch
$ git show master@{1}      # uses reflog for branch 'master'
$ git show HEAD@{1}        # uses 'HEAD' reflog

Ein ref, normalerweise ein Zweig oder ein HEAD, gefolgt vom Suffix @ mit einer in einem geschweiften Klammerpaar (z. B. {1} , {15} ) eingeschlossenen Ordinalzahl, gibt den n-ten vorherigen Wert dieses Ref in Ihrem lokalen Repository an . Sie können die letzten reflog-Einträge mit git reflog Befehl git reflog oder mit der Option --walk-reflogs / -g --walk-reflogs um das git log zu git log .

$ git reflog
08bb350 HEAD@{0}: reset: moving to HEAD^
4ebf58d HEAD@{1}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{2}: pull: Fast-forward
f34be46 HEAD@{3}: checkout: moving from af40944bda352190f05d22b7cb8fe88beb17f3a7 to master
af40944 HEAD@{4}: checkout: moving from master to v2.6.3

$ git reflog gitweb-docs
4ebf58d gitweb-docs@{0}: branch: Created from master

Hinweis : Die Verwendung von Reflogs ersetzt praktisch den älteren Mechanismus der Verwendung von ORIG_HEAD ref (entspricht ungefähr HEAD@{1} ).

Reflog-Referenzen: @ { }

$ git show master@{yesterday}
$ git show HEAD@{5 minutes ago}   # or HEAD@{5.minutes.ago}

Ein Ref, gefolgt von dem Suffix @ mit einer Datumsangabe in einer Klammer (z. B. {yesterday} , {1 month 2 weeks 3 days 1 hour 1 second ago} oder {1979-02-26 18:30:00} ), wird angegeben der Wert des Ref zu einem früheren Zeitpunkt (oder dem nächstgelegenen Punkt). Beachten Sie, dass dies den Status Ihrer lokalen Referenz zu einem bestimmten Zeitpunkt anzeigt. Zum Beispiel, was letzte Woche in Ihrer lokalen 'Master'- Filiale war.

Sie können git reflog mit einem Datumsbezeichner verwenden, um die genaue Zeit git reflog zu der Sie im lokalen Repository etwas git reflog um eine Angabe zu machen.

$ git reflog HEAD@{now}
08bb350 HEAD@{Sat Jul 23 19:48:13 2016 +0200}: reset: moving to HEAD^
4ebf58d HEAD@{Sat Jul 23 19:39:20 2016 +0200}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{Sat Jul 23 19:26:43 2016 +0200}: pull: Fast-forward

Tracked / Upstream-Zweig: @ {Upstream}

$ git log @{upstream}..       # what was done locally and not yet published, current branch
$ git show master@{upstream}  # show upstream of branch 'master'

Das Suffix @{upstream} an einen Verzweigungsnamen angehängt wird (Kurzform <branchname>@{u} ), bezieht sich auf die Verzweigung, auf die die durch Verzweigungsname angegebene Verzweigung (über branch.<name>.remote und branch.<name>.merge oder mit git branch --set-upstream-to=<branch> ). Ein fehlender Zweigname ist standardmäßig der aktuelle.

Zusammen mit der Syntax für Revisionsbereiche ist es sehr nützlich zu sehen, welche Commits Ihrer Filiale vor dem Upstream vorausgeht (Commits in Ihrem lokalen Repository sind noch nicht im Upstream vorhanden) und welche Commits Sie hinter sich haben (Commits im Upstream, die nicht in die lokale Filiale eingebunden sind) oder beide:

$ git log --oneline @{u}..
$ git log --oneline ..@{u}
$ git log --oneline --left-right @{u}...  # same as ...@{u}

Commit-Ancestry-Kette: ^, ~ , usw.

$ git reset --hard HEAD^             # discard last commit
$ git rebase --interactive HEAD~5    # rebase last 4 commits

Ein Suffix ^ zu einem Revisionsparameter bedeutet das erste übergeordnete Element dieses Commit-Objekts. ^<n> bedeutet das <n> -te Elternteil (dh <rev>^ entspricht <rev>^1 ).

Ein Suffix ~<n> zu einem Revisionsparameter bedeutet das Commit-Objekt, das der <n> -te Generationsvorfahr des benannten Commit-Objekts ist und nur den ersten Elternteilen folgt. Dies bedeutet, dass zum Beispiel <rev>~3 <rev>^^^ . Als Abkürzung <rev>~ Mittel <rev>~1 , und ist äquivalent zu <rev>^1 oder <rev>^ in kurz.

Diese Syntax ist komponierbar.


Um solche symbolischen Namen zu finden, können Sie den Befehl git name-rev :

$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

Beachten Sie, dass im folgenden Beispiel --pretty=oneline und nicht --oneline verwendet werden muss

$ git log --pretty=oneline | git name-rev --stdin --name-only
master Sixth batch of topics for 2.10
master~1 Merge branch 'ls/p4-tmp-refs'
master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'
[...]
master~14^2 sideband.c: small optimization of strbuf usage
master~16^2 connect: read $GIT_SSH_COMMAND from config file
[...]
master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency
master~22^2~2 t7810-grep.sh: fix duplicated test name

Dereferenzieren von Zweigen und Tags: ^ 0, ^ { }

In einigen Fällen hängt das Verhalten eines Befehls davon ab, ob ihm ein Verzweigungsname, ein Variablenname oder eine beliebige Revision gegeben wird. Sie können die "De-Referenzierung" -Syntax verwenden, wenn Sie die letztere benötigen.

Ein Suffix ^ gefolgt von einem Objekttypnamen ( tag , commit , tree , blob ) in v0.99.8^{commit} (z. B. v0.99.8^{commit} ) bedeutet, dass das Objekt bei <rev> rekursiv dereferenziert wird, bis ein Objekt vom Typ <type> gefunden oder das Objekt kann nicht mehr dereferenziert werden. <rev>^0 ist eine Abkürzung für <rev>^{commit} .

$ git checkout HEAD^0    # equivalent to 'git checkout --detach' in modern Git

Ein Suffix ^ gefolgt von einem leeren v0.99.8^{} (z. B. v0.99.8^{} ) bedeutet, dass das Tag rekursiv dereferenziert wird, bis ein Nicht-Tag-Objekt gefunden wird.

Vergleichen Sie

$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0

mit

$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}

Jüngster passender Commit: ^ {/ },: /

$ git show HEAD^{/fix nasty bug}   # find starting from HEAD
$ git show ':/fix nasty bug'       # find starting from any branch

Ein Doppelpunkt (' : '), gefolgt von einem Schrägstrich (' / '), gefolgt von einem Text, benennt ein Commit, dessen Commit-Nachricht mit dem angegebenen regulären Ausdruck übereinstimmt. Dieser Name gibt das jüngste übereinstimmende Commit zurück, das von jedem Ref. Erreichbar ist. Der reguläre Ausdruck kann mit jedem Teil der Commit-Nachricht übereinstimmen. Zum Abgleichen von Nachrichten, die mit einem String beginnen, können Sie beispielsweise :/^foo verwenden :/^foo . Die spezielle Reihenfolge :/! ist reserviert für Modifikatoren für das, was abgeglichen wird. :/!-foo führt ein negatives Match aus, während :/!!foo ein Literal enthält! Charakter, gefolgt von foo .

Ein Suffix ^ zu einem Revisionsparameter, gefolgt von einem geschweiften Klammerpaar, das einen von einem Schrägstrich geführten Text enthält, ist mit der folgenden Syntax :/<text> identisch und gibt das jüngste übereinstimmende Commit zurück, das vom <rev> erreichbar ist ^ .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow