Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.40.1 → 2.43.0 no changes
- 2.40.0 03/12/23
- 2.38.1 → 2.39.3 no changes
- 2.38.0 10/02/22
- 2.37.4 → 2.37.7 no changes
- 2.37.3 08/30/22
- 2.34.1 → 2.37.2 no changes
- 2.34.0 11/15/21
ÜBERSICHT
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize] [--chmod=(+|-)x] [--pathspec-from-file=<Datei> [--pathspec-file-nul]] [--] [<Pfadspezifikation>…]
BESCHREIBUNG
Dieser Befehl aktualisiert den Index mit dem aktuellen Inhalt im Arbeitsbereich, um den Inhalt für den nächsten Commit vorzubereiten. Typischerweise wird der gesamte aktuelle Inhalt in existierenden Pfaden hinzugefügt. Mit einigen Optionen kann der Befehl so verwendet werden, dass nur bestimmte Änderungen hinzugefügt werden, oder bestimmte Pfade entfernt werden, die in der Arbeitskopie nicht mehr existieren.
Der „Index“ enthält eine Momentaufnahme (snapshot) des Inhalts des
Arbeitsbereichs und es ist genau diese Momentaufnahme, die beim nächsten
Commit übernommen wird. Nachdem man Änderungen am Arbeitsbereich vorgenommen
hat und bevor man den Commit-Befehl ausführt, muss man deshalb den Befehl
add
verwenden, um alle neuen oder geänderten Dateien zum Index
hinzuzufügen.
Diese Anweisung kann vor einem Commit mehrfach ausgeführt werden. Es wird
lediglich der Inhalt der angegebenen Datei(en) zum Ausführungszeitpunkt
hinzugefügt. Soll eine spätere Änderung einer dieser Dateien in den nächsten
Commit aufgenommen werden, so muss git add
erneut aufgerufen werden.
Der Befehl git status
kann verwendet werden, um zusammenzufassen, welche
Dateien geändert und die für den nächsten Commit bereitgestellt wurden.
Der Befehl git add
wird standardmäßig keine ignorierten Dateien
hinzufügen. Wenn ignorierte Dateien (.gitignore) explizit in der
Befehlszeile angegeben wurden, wird git add
fehlschlagen und eine Liste
aller ignorierten Dateien ausgeben. Ignorierte Dateien die über eine
rekursive Verzeichnisnavigation oder durch von git durchgeführtes globbing
(Platzhalter-Auflösung z.B. *.jpg) erreicht wurden, werden stillschweigend
ignoriert. Der git add Befehl kann das Hinzufügen ignorierter Dateien mit
der Option -f
(force) erzwingen.
Bitte lesen Sie git-commit[1] für Alternativen zum Hinzufügen von Inhalt zu einem Commit.
OPTIONEN
- <Pfadspezifikation>…
-
Dateien aus denen Inhalt hinzugefügt wird. Dateien, mit im Namen enthaltenen Wildcards (sog. File-Globs, z.B.
*.c
), können eingegeben werden, um alle übereinstimmenden Dateien hinzuzufügen. Auch ein vorangestellter Verzeichnisname (z.B.dir
, umdir/file1
unddir/file2
hinzuzufügen) kann angegeben werden, um den Index zu aktualisieren, damit er dann dem aktuellen Zustand des Verzeichnisses als Ganzem entspricht (z.B. wird die Angabe vondir
nicht nur eine im Arbeitsbereich modifizierte Dateidir/file1
, eine zum Arbeitsbereich hinzugefügte Dateidir/file2
, sondern auch eine aus dem Arbeitsbereich entfernte Dateidir/file3
aufzeichnen). Es ist zu beachten, dass ältere Versionen von Git bisher die gelöschten Dateien ignoriert haben; benutzen Sie die Option--no-all
, wenn Sie geänderte oder neue Dateien hinzufügen, aber gelöschte ignorieren wollen.Für mehr Detail über die <Pfadspezifikation> Syntax kann der 'pathspec' Eintrag im gitglossary[7] zur Rate gezogen werden.
- -n
- --dry-run
-
Fügt die Datei(en) nicht wirklich hinzu, sondern zeigt nur an, ob sie existieren und/oder ignoriert werden.
- -v
- --verbose
-
Gib ausführliche Informationen aus.
- -f
- --force
-
Erzwingt das Hinzufügen normalerweise ignorierter Dateien.
- -i
- --interactive
-
Fügt geänderte Inhalte im Arbeitsbereich interaktiv zum Index hinzu. Optionale Pfad-Argumente können verwendet werden, um die Operation auf einen spezifischen Teil des Arbeitsbereichs einzuschränken. Siehe „Interaktiver Modus“ für weitere Details.
- -p
- --patch
-
Wählt interaktiv Blöcke aus Patches zwischen dem Index und dem Arbeitsbereich aus und fügt sie dem Index hinzu. Dadurch hat der Benutzer die Möglichkeit, die Differenz zu überprüfen, bevor er geänderte Inhalte zum Index hinzufügt.
Dadurch wird praktisch
add --interaktiv
ausgeführt, aber das anfängliche Befehlsmenü wird umgangen und direkt zum Unterbefehlpatch
weitergeleitet. Siehe „Interaktiver Modus“ für weitere Details. - -e
- --edit
-
Öffnet Diff gegenüber dem Index in einem Editor und lässt ihn vom Benutzer bearbeiten. Nach dem Schließen des Editors sollten die Headerteile (hunk headers) angepasst werden und der Patch auf den Index angewendet werden.
Der Zweck dieser Option besteht darin, einzelne Zeilen des Patches für die Anwendung auszuwählen oder sogar den Inhalt der zu inszenierenden (staged) Zeilen zu modifizieren. Das geht schneller und ist flexibler als mit dem interaktiven Hunk-Selector. Es ist jedoch leicht, sich selbst zu verwirren und einen Patch zu erstellen, der sich nicht auf den Index bezieht. Siehe bei PATCHES BEARBEITEN weiter unten.
- -u
- --update
-
Aktualisiert den Index genau dort, wo er bereits einen Eintrag hat, der mit der <Pfadspezifikation> übereinstimmt. Dadurch werden sowohl Indexeinträge entfernt als auch modifiziert, um dem Arbeitsbereich zu entsprechen, aber keine neuen Dateien hinzugefügt.
Wenn die Option
-u
verwendet wird und keine <Pfadspezifikation> angegeben wird, werden alle getrackten Dateien im gesamten Arbeitsbereich aktualisiert (frühere Git-Versionen begrenzten die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse). - -A
- --all
- --no-ignore-removal
-
Aktualisiert den Index nicht nur dort, wo der Arbeitsbereich eine Datei enthält, die mit der <Pfadspezifikation> übereinstimmt, sondern auch dort, wo der Index bereits einen Eintrag enthält. Dadurch werden Indexeinträge hinzugefügt, modifiziert und entfernt, um dem Arbeitsbereich anzupassen.
Wenn keine <Pfadspezifikation> angegeben wird und wenn die Option
-A
verwendet wird, werden alle Dateien im gesamten Arbeitsbereich aktualisiert (alte Versionen von Git begrenzten die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse). - --no-all
- --ignore-removal
-
Aktualisiert den Index durch Hinzufügen neuer Dateien, die dem Index unbekannt sind und Dateien, die im Arbeitsbereich geändert wurden, aber ignoriert Dateien, die aus dem Arbeitsbereich entfernt wurden. Diese Option ist eine „Nulloperation“, wenn keine <Pfadspezifikation> verwendet wird.
Diese Option soll in erster Linie Benutzern helfen, die mit älteren Versionen von Git vertraut sind und deren "git add <Pfadspezifikation>…" ein Synonym für "git add --no-all <Pfadspezifikation>…" war, d.h. gelöschte Dateien ignoriert haben.
- -N
- --intent-to-add
-
Zeichnet nur den Sachverhalt auf, dass der Pfad später hinzugefügt wird. Ein Eintrag für den Pfad wird ohne Inhalt in den Index aufgenommen. Das ist unter anderem sinnvoll, um den nicht gestagten Inhalt solcher Dateien mit
git diff
anzuzeigen und sie mitgit commit -a
zu übertragen (committen). - --refresh
-
Füge keine Datei(en) hinzu, sondern aktualisiere lediglich deren stat() Information im Index.
- --ignore-errors
-
Konnten einige Dateien aufgrund von Fehlern beim Indizieren nicht hinzugefügt werden, dann fahre mit dem Hinzufügen weiter, ohne die Operation abzubrechen. Der Befehl wird trotzdem mit einem Fehlerwert ungleich 0 beendet. Die Konfigurations-Variable
add.ignoreErrors
kann auf „true“ gesetzt werden, um dieses Verhalten standardmäßig zu aktivieren. - --ignore-missing
-
Diese Option kann nur zusammen mit
--dry-run
verwendet werden. Mit dieser Option kann der Benutzer prüfen, ob eine der angegebenen Dateien ignoriert werden würden, unabhängig davon, ob sie bereits im Arbeitsbereich vorhanden sind oder nicht. - --no-warn-embedded-repo
-
Standardmäßig warnt
git add
, wenn ein eingebettetes Repository zum Index hinzugefügt wird, ohne dassgit submodule add
verwendet wird, um einen Eintrag in.gitmodules
zu erstellen. Diese Option unterdrückt die Warnung (z.B. wenn Sie Bearbeitungsschritte an Submodulen manuell durchführen). - --renormalize
-
Den „clean“ Prozess neu auf alle getrackten Dateien anwenden, um sie zwangsweise wieder dem Index hinzuzufügen. Dies ist hilfreich, nachdem die Konfiguration
core.autocrlf
oder das Attribut`text` geändert wurde, um Dateien zu berichtigen, die mit falschen CRLF/LF-Zeilenenden eingefügt wurden. Diese Option impliziert-u
. - --chmod=(+|-)x
-
Überschreibt das Executable-Bit der hinzugefügten Dateien. Das Executable-Bit wird nur im Index geändert, die Dateien auf der Festplatte bleiben unverändert.
- --pathspec-from-file=<Datei>
-
Die Pfadangabe wird in
<Datei>
statt über Befehlszeilen-Argumente übergeben. Wenn<Datei>
genau-
ist, wird die Standardeingabe verwendet. Pfadspezifische Elemente werden durch LF oder CR/LF getrennt. Pathspec-Elemente können in Anführungszeichen gesetzt werden, wie für die Konfigurations-Variablecore.quotePath
beschrieben (siehe git-config[1]). Siehe auch--pathspec-file-nul
und global--literal-pathspecs
. - --pathspec-file-nul
-
Nur sinnvoll mit
--pathspec-from-file
. Pfadspezifische Elemente werden mit dem Steuerzeichen-Code NULL getrennt und alle anderen Zeichen werden unverändert übernommen (einschließlich der Zeilenumbrüche und Anführungszeichen). - --
-
Diese Option kann dazu verwendet werden, Befehlszeilenoptionen von der Liste von Dateien zu trennen. Dies ist sinnvoll, wenn Dateinamen mit Befehlszeilenoptionen verwechselt werden könnten.
BEISPIELE
-
Füge die Inhalte aller
*.txt
Dateien unter demDocumentation
Verzeichnis und seinen Unterverzeichnissen hinzu:$ git add Documentation/\*.txt
Anmerkung: das Sternchen
*
wird in diesem Beispiel vom Befehlsprozessor (shell) nicht automatisch erweitert, wodurch der git add Befehl auch Unterverzeichnisse desDocumentation/
Verzeichnisses erfassen kann. -
Berücksichtigt das Hinzufügen von Inhalten aus allen git-*.sh-Skripten:
$ git add git-*.sh
Weil in diesem Beispiel die Shell über das Sternchen expandiert (d.h. Sie listen die Dateien explizit auf), wird
subdir/git-foo.sh
nicht berücksichtigt.
INTERAKTIVER MODUS
Wird Git im interaktiven Modus gestartet, zeigt es zuerst die Ausgabe des status Unterbefehls, und beginnt dann mit der interaktiven Befehlsverarbeitung.
Diese zeigt eine Liste der möglichen Unterbefehle und fragt "What now> ". Wenn die Frage mit einem einzelnen > endet, kann man im Allgemeinen aus einer der folgenden Optionen wählen und diese mit der Eingabetaste bestätigen:
*** Befehle *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help Was nun> 1
Man kann auch s
oder sta
oder status
eingeben, solange die Auswahl
eindeutig ist.
Die Hauptbefehlsschleife hat 6 Unterbefehle (sowie zusätzlich help und quit).
- status
-
Zeigt den Unterschied zwischen HEAD und dem Index (also was committet wird, wenn man
git commit
ausführt), sowie zwischen dem Index und den Dateien im Arbeitsbereich (also was man vor einemgit commit
mittelsgit-add
hinzufügen könnte) für jeden Pfad. Eine Beispielausgabe:zur Staging-Area hinzugefügt aus Staging-Area entfernt Pfad 1: Binär Nichts foo.png 2: +403/-35 +1/-1 git-add--interactive.perl
Es zeigt sich, dass foo.png im Vergleich mit dem HEAD geändert wurde, (da es sich um eine Binärdatei handelt wird keine Zeilenanzahl gezeigt), und dass kein Unterschied zwischen dem Index und der Version im Arbeitsbereich besteht (Wäre diese ebenfalls unterschiedlich, würde binary anstatt nothing angezeigt werden). Die andere Datei, git-add--interactive.perl, hat 403 hinzugefügte und 35 gelöschte Zeilen, wenn man das commited was sich aktuell im Index befindet, und im Arbeitsbereich befinden sich weitere Änderungen (1 Zeile hinzugefügt, 1 Zeile gelöscht).
- update
-
Zeigt die Status Information und wartet mit der Meldung "Update>>" auf weitere Eingaben. Wenn die Meldung mit doppelten >> endet, kann man, getrennt durch Leerzeichen oder Beistriche, mehrere Operationen auswählen. Man kann auch ganze Bereiche angeben, z.B. "2-5 7,9" um 2,3,4,5,7,9 aus der Liste auszuwählen. Wird die zweite Nummer eines Bereichs nicht angegeben, reicht dieser bis an das Ende der Liste, z.B. "7-" um 7,8,9 aus der Liste auszuwählen. Durch * werden alle Listeneinträge ausgewählt.
Alle ausgewählten Listeneinträge werden wie folgt mit einem Stern * markiert:
zur Staging-Area hinzugefügt aus Staging-Area entfernt Pfad 1: Binär Nichts foo.png * 2: +403/-35 +1/-1 git-add--interactive.perl
Ein
-
vor der Option macht die Auswahl wieder rückgängig:Update>> -2
Nachdem die Auswahl getroffen wurde, kann durch Eingabe einer Leerzeile der Inhalt der ausgewählten Dateien in den Index aufgenommen werden.
- revert
-
Diese Option ist sehr ähnlich zu update, nur wird die im Index gespeicherte Änderungsinformation für die ausgewählten Dateien auf die im HEAD gespeicherte Version zurückgesetzt. Werden neue Dateien zurückgesetzt, so wird die Information darüber aus Git wieder entfernt.
- add untracked
-
Mit einer zu update und revert sehr ähnlichen Bedienweise können mit Git noch nicht verwaltete Dateien zum Index hinzugefügt werden.
- patch
-
Ermöglicht die Auswahl eines Pfades aus der status Liste. Anschließend wird der diff zwischen dem Index und der Datei im Arbeitsbereich angezeigt und gefragt, ob die einzelnen Brocken hinzugefügt werden sollen. Man kann auswählen zwischen (Übersetzung in Klammern):
y - diesen Patch-Block zum Commit vormerken n - diesen Patch-Block nicht zum Commit vormerken q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht zum Commit vormerken a - diesen und alle weiteren Patch-Blöcke dieser Datei zum Commit vormerken d - diesen oder alle weiteren Patch-Blöcke in dieser Datei nicht zum Commit vormerken g - Patch-Block zum hinspringen auswählen / - nach Patch-Block suchen, der gegebenem regulärem Ausdruck entspricht j - diesen Patch-Block unbestimmt lassen, nächsten unbestimmten Patch-Block anzeigen J - diesen Patch-Block unbestimmt lassen, nächsten Patch-Block anzeigen k - diesen Patch-Block unbestimmt lassen, vorherigen unbestimmten Patch-Block anzeigen K - diesen Patch-Block unbestimmt lassen, vorherigen Patch-Block anzeigen s - aktuellen Patch-Block in kleinere Patch-Blöcke aufteilen e - aktuellen Patch-Block manuell editieren ? - Hilfe anzeigen
Nachdem zumindest ein Source Brocken ausgewählt wurde werden die ausgewählten Brocken in den Index aufgenommen.
Sie können die Konfigurations-Variable
interactive.singleKey
auftrue
setzen um hier nicht Enter drücken zu müssen. - diff
-
Zeigt die Änderungen an, die committet werden würden (also zwischen HEAD und Index).
PATCHES EDITIEREN
Der Aufruf von git add -e
oder die Auswahl von e
aus dem interaktiven
Hunk-Selector öffnet einen Patch in Ihrem Editor. Nach Verlassen des Editors
wird das Ergebnis in den Index übernommen. Es ist Ihre Entscheidung,
beliebige Änderungen an dem Patch vorzunehmen, aber beachten Sie, dass
einige Änderungen irreführende Ergebnisse haben oder sogar zu einem Patch
führen können, der nicht angewendet werden kann. Wenn Sie die Operation
vollständig abbrechen wollen (d.h. nichts Neues in den Index stagen),
löschen Sie einfach alle Zeilen des Patches. Die folgende Liste beschreibt
einige gängige Elemente, die Sie in einem Patch sehen können, und welche
Bearbeitungsvorgänge bei ihnen sinnvoll sind.
- hinzugefügter Inhalt
-
Hinzugefügter Inhalt wird durch Zeilen dargestellt, die mit "+" beginnen. Sie können das Staging von hinzugefügten Zeilen verhindern, indem Sie diese löschen.
- entfernter, gelöschter Inhalt
-
Entfernter Inhalt wird durch Zeilen dargestellt, die mit "-" beginnen. Sie können die Entfernung aus der Staging Area verhindern, indem Sie das "-" in ein " " (Leerzeichen) umwandeln.
- geänderter Inhalt
-
Geänderter Inhalt wird durch "-" Zeilen (entfernen des alten Inhalts), gefolgt von "+" Zeilen (hinzufügen des Ersatzinhalts) dargestellt. Sie können das Staging der Änderung verhindern, indem Sie "-" Zeilen in " " konvertieren und "+"-Zeilen entfernen. Achten Sie darauf, dass die Änderung von nur der Hälfte des Paares wahrscheinlich irreführende Änderungen am Index mit sich bringt.
Es gibt auch komplexere Operationen, die durchgeführt werden könnten. Aber Vorsicht: Da der Patch nur auf den Index und nicht auf den Arbeitsbereich angewendet wird, scheint es, als würde der Arbeitsbereich die Änderung im Index "rückgängig machen". Wenn zum Beispiel eine neue Zeile in den Index eingefügt wird, die sich weder im HEAD noch im Arbeitsbereich befindet, wird sie für einen Commit bereitgestellt, aber diese Zeile erscheint im Arbeitsbereich als zurückgesetzt.
Vermeiden Sie diese Konstrukte oder gehen Sie mit äußerster Vorsicht vor.
- entfernen von unverändertem Inhalt
-
Inhalt, der nicht zwischen Index und Arbeitsbereich differiert, kann in Kontextzeilen angezeigt werden, die mit einem " " (Leerzeichen) beginnen. Sie können Kontextzeilen zum Entfernen vorsehen, indem Sie das Leerzeichen in ein "-" umwandeln. Die resultierende Datei des Arbeitsbereichs wird angezeigt, um den Inhalt erneut hinzuzufügen.
- ändern von vorhandenem Inhalt
-
Man kann auch Kontextzeilen modifizieren, indem man sie zur Entfernung bereitstellt (man wandelt " " in "-" um) und eine "+" Zeile mit dem neuen Inhalt hinzufügt. In ähnlicher Weise kann man "+" Zeilen für bestehende Erweiterungen oder Modifikationen verändern. In allen Fällen erscheint die neue Modifikation im Arbeitsbereich als zurückgesetzt.
- neuer Inhalt
-
Man kann auch Inhalt neu hinzufügen, der im Patch nicht vorhanden ist. Dazu einfach neue Zeilen einfügen, die jeweils mit "+" beginnen. Die Erweiterung erscheint dann im Arbeitsbereich als zurückgesetzt.
Es gibt auch einige Operationen, die ganz vermieden werden sollten, da sie die Anwendung des Patches unmöglich machen würden:
-
Hinzufügen von Kontext (" ") oder Entfernen ("-") von Zeilen
-
Löschen von Kontext oder Entfernen von Zeilen
-
Ändern des Inhalts von Kontextzeilen oder entfernen von Zeilen
GIT
Teil der git[1] Suite