English ▾ Themen ▾ Neueste Version ▾ gitcli zuletzt aktualisiert in 2.52.0

NAME

gitcli - Git Kommandozeilenschnittstelle und Konventionen

SYNOPSIS

gitcli

BESCHREIBUNG

Dieses Handbuch beschreibt die Konvention, die in der gesamten Git CLI verwendet wird.

Viele Befehle nehmen Revisionen (meistens "Commits", aber manchmal auch "Tree-ish", je nach Kontext und Befehl) und Pfade als Argumente entgegen. Hier sind die Regeln

  • Optionen kommen zuerst, dann die Argumente. Ein Unterbefehl kann gestrichelte Optionen (die eigene Argumente haben können, z. B. "--max-parents 2") und Argumente nehmen. Sie SOLLTEN gestrichelte Optionen zuerst und dann Argumente angeben. Einige Befehle können gestrichelte Optionen akzeptieren, nachdem Sie bereits Nicht-Options-Argumente angegeben haben (was den Befehl mehrdeutig machen kann), aber Sie sollten sich nicht darauf verlassen (da wir schließlich einen Weg finden könnten, diese Mehrdeutigkeiten zu beheben, indem wir die Regel "Optionen dann Argumente" durchsetzen).

  • Revisionen kommen zuerst, dann Pfade. Z. B. in git diff v1.0 v2.0 arch/x86 include/asm-x86 sind v1.0 und v2.0 Revisionen und arch/x86 und include/asm-x86 sind Pfade.

  • Wenn ein Argument missverstanden werden kann, entweder als Revision oder als Pfad, können sie durch die Platzierung von -- dazwischen eindeutig gemacht werden. Z. B. git diff -- HEAD bedeutet "Ich habe eine Datei namens HEAD in meinem Arbeitsverzeichnis. Bitte zeigen Sie die Unterschiede zwischen der Version, die ich im Index vorbereitet habe, und dem, was ich in meinem Arbeitsverzeichnis für diese Datei habe", nicht "zeigen Sie den Unterschied zwischen dem HEAD-Commit und dem Arbeitsverzeichnis als Ganzes". Sie können git diff HEAD -- sagen, um letzteres anzufordern.

  • Ohne die eindeutig machende -- trifft Git eine vernünftige Vermutung, gibt aber eine Fehlermeldung aus und bittet Sie, sie eindeutig zu machen, wenn sie mehrdeutig ist. Z. B. wenn Sie eine Datei namens HEAD in Ihrem Arbeitsverzeichnis haben, ist git diff HEAD mehrdeutig und Sie müssen entweder git diff HEAD -- oder git diff -- HEAD sagen, um sie eindeutig zu machen.

  • Da -- Revisionen und Pfade in einigen Befehlen eindeutig macht, kann es für diese Befehle nicht verwendet werden, um Optionen und Revisionen zu trennen. Sie können --end-of-options dafür verwenden (es funktioniert auch für Befehle, die nicht zwischen Revisionen und Pfaden unterscheiden, in diesem Fall ist es einfach ein Alias für --).

    Beim Schreiben eines Skripts, das zufällige Benutzereingaben verarbeiten soll, ist es eine gute Praxis, explizit anzugeben, welche Argumente welche sind, indem Sie eindeutig machende -- an den entsprechenden Stellen platzieren.

  • Viele Befehle erlauben Wildcards in Pfaden, aber Sie müssen sie davor schützen, von der Shell "globbed" zu werden. Diese beiden bedeuten unterschiedliche Dinge

    $ git restore *.c
    $ git restore \*.c

    Ersteres lässt Ihre Shell die Dateimuster erweitern, und Sie bitten, die Punkt-C-Dateien in Ihrem Arbeitsverzeichnis mit der Version im Index zu überschreiben. Letzteres übergibt das *.c an Git, und Sie bitten, dass die Pfade im Index, die dem Muster entsprechen, in Ihr Arbeitsverzeichnis ausgecheckt werden. Nach dem Ausführen von git add hello.c; rm hello.c sehen Sie hello.c mit dem Ersteren nicht in Ihrem Arbeitsverzeichnis, aber mit Letzterem werden Sie es sehen.

  • So wie das Dateisystem . (Punkt) das aktuelle Verzeichnis bezeichnet, ist die Verwendung eines . als Repository-Name in Git (ein Punkt-Repository) ein relativer Pfad und bedeutet Ihr aktuelles Repository.

Hier sind die Regeln bezüglich der "Flags", denen Sie folgen sollten, wenn Sie Git-Skripte schreiben

  • Kurze Optionen auf getrennte Wörter aufteilen (bevorzugen Sie git foo -a -b gegenüber git foo -ab, letzteres funktioniert möglicherweise nicht einmal).

  • Wenn eine Kommandozeilenoption ein Argument nimmt, verwenden Sie die "gesteckte" Form. Das heißt, schreiben Sie git foo -oArg anstelle von git foo -o Arg für kurze Optionen und git foo --long-opt=Arg anstelle von git foo --long-opt Arg für lange Optionen. Eine Option, die ein optionales Optionsargument nimmt, muss in der "gesteckten" Form geschrieben werden.

  • Trotz des obigen Vorschlags, wenn Arg ein Pfad relativ zum Home-Verzeichnis eines Benutzers ist, z. B. ~/directory/file oder ~u/d/f, möchten Sie vielleicht die getrennte Form verwenden, z. B. git foo --file ~/mine, nicht git foo --file=~/mine. Die Shell erweitert ~/ in der ersteren zu Ihrem Home-Verzeichnis, aber die meisten Shells behalten die Tilde in letzterem. Einige unserer Befehle wissen, wie sie den Optionswert mit Tilde erweitern können, auch wenn er in der gesteckten Form gegeben wird, aber nicht alle von ihnen tun das.

  • Wenn Sie einem Befehl einen Revisionsparameter übergeben, stellen Sie sicher, dass der Parameter nicht mit einem Dateinamen im Arbeitsverzeichnis verwechselt werden kann. Z. B. schreiben Sie nicht git log -1 HEAD, sondern git log -1 HEAD --; erstere funktioniert nicht, wenn Sie zufällig eine Datei namens HEAD im Arbeitsverzeichnis haben.

  • Viele Befehle erlauben eine lange Option --option, die nur bis zu ihrem eindeutigen Präfix abgekürzt werden kann (z. B. wenn es keine andere Option gibt, deren Name mit opt beginnt, können Sie möglicherweise --opt schreiben, um das Flag --option aufzurufen), aber Sie sollten sie in Ihren Skripten vollständig ausschreiben; spätere Versionen von Git können eine neue Option einführen, deren Name dasselbe Präfix teilt, z. B. --optimize, um ein kurzes Präfix, das einst eindeutig war, nicht mehr eindeutig zu machen.

ERWEITERTER OPTIONENPARSER

Ab der Git 1.5.4-Serie und weiter verfügen viele Git-Befehle (noch nicht alle zum Zeitpunkt des Schreibens) über einen erweiterten Optionenparser.

Hier ist eine Liste der Einrichtungen, die dieser Optionenparser bietet.

Magische Optionen

Befehle, bei denen der erweiterte Optionenparser aktiviert ist, verstehen alle ein paar magische Kommandozeilenoptionen

-h

gibt eine schön formatierte Nutzung des Befehls aus.

$ git describe -h
usage: git describe [<options>] <commit-ish>*
   or: git describe [<options>] --dirty

    --contains            find the tag that comes after the commit
    --debug               debug search strategy on stderr
    --all                 use any ref
    --tags                use any tag, even unannotated
    --long                always use long format
    --abbrev[=<n>]        use <n> digits to display SHA-1s

Beachten Sie, dass sich einige Unterbefehle (z. B. git grep) anders verhalten können, wenn sich andere Dinge als -h auf der Kommandozeile befinden, aber git subcmd -h ohne etwas anderes auf der Kommandozeile soll konsistent die Nutzung ausgeben.

--help-all

Einige Git-Befehle nehmen Optionen entgegen, die nur für "Plumbing" verwendet werden oder veraltet sind, und solche Optionen sind von der Standardnutzung versteckt. Diese Option gibt die vollständige Liste der Optionen an.

Negieren von Optionen

Optionen mit langen Optionsnamen können durch Voranstellen von --no- negiert werden. Zum Beispiel hat git branch die Option --track, die standardmäßig *aktiviert* ist. Sie können --no-track verwenden, um dieses Verhalten zu überschreiben. Das Gleiche gilt für --color und --no-color.

Optionen schlagen Konfiguration und Umgebung

Wenn es eine Konfigurationsvariable oder eine Umgebungsvariable gibt, die das Verhalten eines Aspekts eines Git-Befehls beeinflusst, und auch eine Kommandozeilenoption, die dasselbe beeinflusst, überschreibt die Kommandozeilenoption, was die Konfigurations- und/oder Umgebungsvariable sagt.

Zum Beispiel wird die Konfigurationsvariable user.name verwendet, um den für Menschen lesbaren Namen anzugeben, der vom Befehl git commit verwendet wird, um den Autoren- und Committer-Namen in einem neu erstellten Commit aufzuzeichnen. Die Umgebungsvariable GIT_AUTHOR_NAME hat, wenn sie gesetzt ist, Vorrang bei der Entscheidung, welcher Autorenname aufgezeichnet werden soll. Die Kommandozeilenoption --author=<author> des Befehls git commit hat, wenn sie gegeben wird, Vorrang vor diesen beiden Informationsquellen.

Zusammenfassen von kurzen Optionen

Befehle, die den erweiterten Optionenparser unterstützen, erlauben Ihnen, kurze Optionen zu aggregieren. Das bedeutet, dass Sie zum Beispiel git rm -rf oder git clean -fdx verwenden können.

Abkürzen von langen Optionen

Befehle, die den erweiterten Optionenparser unterstützen, akzeptieren einen eindeutigen Präfix einer langen Option, als ob sie vollständig ausgeschrieben wären, aber verwenden Sie dies mit Vorsicht. Zum Beispiel verhält sich git commit --amen so, als ob Sie git commit --amend eingegeben hätten, aber das ist nur wahr, bis eine spätere Version von Git eine andere Option einführt, die dasselbe Präfix teilt, z. B. die Option git commit --amenity.

Trennen des Arguments von der Option

Sie können den obligatorischen Optionsparameter für eine Option als separates Wort auf der Kommandozeile schreiben. Das bedeutet, dass alle folgenden Verwendungen funktionieren

$ git foo --long-opt=Arg
$ git foo --long-opt Arg
$ git foo -oArg
$ git foo -o Arg

Dies ist jedoch für Schalter mit optionalem Wert **NICHT** erlaubt, wo die "gesteckte" Form verwendet werden muss

$ git describe --abbrev HEAD     # correct
$ git describe --abbrev=10 HEAD  # correct
$ git describe --abbrev 10 HEAD  # NOT WHAT YOU MEANT

Magische Dateinamen-Optionen

Optionen, die einen Dateinamen entgegennehmen, erlauben ein Präfix :(optional). Zum Beispiel

git commit -F :(optional)COMMIT_EDITMSG
# if COMMIT_EDITMSG does not exist, the above is equivalent to
git commit

Wie bei Konfigurationswerten verhält sich Git, wenn die benannte Datei fehlt, so, als ob die Option gar nicht gegeben worden wäre. Siehe "Werte" in git-config[1].

HINWEISE ZU HÄUFIG VERWECHSELTEN OPTIONEN

Viele Befehle, die mit Dateien im Arbeitsverzeichnis und/oder im Index arbeiten können, können die Optionen --cached und/oder --index entgegennehmen. Manchmal denken Leute fälschlicherweise, dass diese beiden Synonyme sind, da der Index ursprünglich Cache genannt wurde. Das sind sie **nicht** – diese beiden Optionen bedeuten sehr unterschiedliche Dinge.

  • Die Option --cached wird verwendet, um einen Befehl, der normalerweise auf Dateien im Arbeitsverzeichnis arbeitet, anzuweisen, **nur** mit dem Index zu arbeiten. Zum Beispiel sucht git grep, wenn es ohne Commit verwendet wird, um aus welchem Commit gesucht werden soll, normalerweise in Dateien im Arbeitsverzeichnis. Mit der Option --cached sucht es jedoch im Index nach Zeichenketten.

  • Die Option --index wird verwendet, um einen Befehl, der normalerweise auf Dateien im Arbeitsverzeichnis arbeitet, anzuweisen, **auch** den Index zu beeinflussen. Zum Beispiel führt git stash apply normalerweise Änderungen zusammen, die in einem Stash-Eintrag aufgezeichnet sind, in das Arbeitsverzeichnis. Mit der Option --index führt es jedoch auch Änderungen in den Index zusammen.

Der Befehl git apply kann mit --cached und --index verwendet werden (aber nicht gleichzeitig). Normalerweise beeinflusst der Befehl nur die Dateien im Arbeitsverzeichnis, aber mit --index patcht er sowohl die Dateien als auch ihre Indexeinträge, und mit --cached modifiziert er nur die Indexeinträge.

Einige andere Befehle, die ebenfalls mit Dateien im Arbeitsverzeichnis und/oder im Index arbeiten, können --staged und/oder --worktree entgegennehmen.

  • --staged ist genau wie --cached, was verwendet wird, um einen Befehl anzuweisen, nur mit dem Index und nicht mit dem Arbeitsverzeichnis zu arbeiten.

  • --worktree ist das Gegenteil, um einen Befehl anzuweisen, nur mit dem Arbeitsverzeichnis und nicht mit dem Index zu arbeiten.

  • Die beiden Optionen können zusammen angegeben werden, um einen Befehl anzuweisen, sowohl mit dem Index als auch mit dem Arbeitsverzeichnis zu arbeiten.

GIT

Teil der git[1] Suite