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.52.0
2025-11-17
- 2.50.1 → 2.51.2 keine Änderungen
-
2.50.0
2025-06-16
- 2.49.1 keine Änderungen
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 keine Änderungen
-
2.48.0
2025-01-10
- 2.45.1 → 2.47.3 keine Änderungen
- 2.45.0 keine Änderungen
- 2.43.1 → 2.44.4 keine Änderungen
-
2.43.0
2023-11-20
- 2.36.1 → 2.42.4 keine Änderungen
-
2.36.0
2022-04-18
- 2.25.3 → 2.35.8 keine Änderungen
-
2.25.2
2020-03-17
- 2.25.1 keine Änderungen
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 keine Änderungen
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 keine Änderungen
-
2.23.0
2019-08-16
- 2.18.1 → 2.22.5 keine Änderungen
-
2.18.0
2018-06-21
- 2.15.4 → 2.17.6 keine Änderungen
-
2.14.6
2019-12-06
- 2.2.3 → 2.13.7 keine Änderungen
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
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
gitdiffv1.0v2.0arch/x86include/asm-x86sindv1.0undv2.0Revisionen undarch/x86undinclude/asm-x86sind 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.gitdiff--HEADbedeutet "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önnengitdiffHEAD--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, istgitdiffHEADmehrdeutig und Sie müssen entwedergitdiffHEAD--odergitdiff--HEADsagen, 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-optionsdafü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
*.can 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 Siehello.cmit 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
gitfoo-a-bgegenübergitfoo-ab, letzteres funktioniert möglicherweise nicht einmal). -
Wenn eine Kommandozeilenoption ein Argument nimmt, verwenden Sie die "gesteckte" Form. Das heißt, schreiben Sie
gitfoo-oArganstelle vongitfoo-oArgfür kurze Optionen undgitfoo--long-opt=Arganstelle vongitfoo--long-optArgfü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/fileoder~u/d/f, möchten Sie vielleicht die getrennte Form verwenden, z. B.gitfoo--file~/mine, nichtgitfoo--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
gitlog-1HEAD, sonderngitlog-1HEAD--; erstere funktioniert nicht, wenn Sie zufällig eine Datei namensHEADim 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 mitoptbeginnt, können Sie möglicherweise--optschreiben, um das Flag--optionaufzurufen), 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-1sBeachten Sie, dass sich einige Unterbefehle (z. B.
gitgrep) anders verhalten können, wenn sich andere Dinge als-hauf der Kommandozeile befinden, abergitsubcmd-hohne 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
--cachedwird verwendet, um einen Befehl, der normalerweise auf Dateien im Arbeitsverzeichnis arbeitet, anzuweisen, **nur** mit dem Index zu arbeiten. Zum Beispiel suchtgitgrep, wenn es ohne Commit verwendet wird, um aus welchem Commit gesucht werden soll, normalerweise in Dateien im Arbeitsverzeichnis. Mit der Option--cachedsucht es jedoch im Index nach Zeichenketten. -
Die Option
--indexwird verwendet, um einen Befehl, der normalerweise auf Dateien im Arbeitsverzeichnis arbeitet, anzuweisen, **auch** den Index zu beeinflussen. Zum Beispiel führtgitstashapplynormalerweise Änderungen zusammen, die in einem Stash-Eintrag aufgezeichnet sind, in das Arbeitsverzeichnis. Mit der Option--indexfü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.
Siehe auch https://lore.kernel.org/git/7v64clg5u9.fsf@assigned-by-dhcp.cox.net/ und https://lore.kernel.org/git/7vy7ej9g38.fsf@gitster.siamese.dyndns.org/ für weitere Informationen.
Einige andere Befehle, die ebenfalls mit Dateien im Arbeitsverzeichnis und/oder im Index arbeiten, können --staged und/oder --worktree entgegennehmen.
-
--stagedist genau wie--cached, was verwendet wird, um einen Befehl anzuweisen, nur mit dem Index und nicht mit dem Arbeitsverzeichnis zu arbeiten. -
--worktreeist 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