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.46.1 → 2.47.0 no changes
- 2.46.0 no changes
- 2.45.1 → 2.45.2 no changes
- 2.45.0 04/29/24
- 2.43.2 → 2.44.2 no changes
- 2.43.1 02/09/24
- 2.40.1 → 2.43.0 no changes
- 2.40.0 03/12/23
- 2.38.1 → 2.39.5 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
- 2.25.1 → 2.33.8 no changes
- 2.25.0 01/13/20
- 2.22.1 → 2.24.4 no changes
- 2.22.0 no changes
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.18.1 → 2.20.5 no changes
- 2.18.0 06/21/18
- 2.17.0 → 2.17.6 no changes
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.11.4 → 2.13.7 no changes
- 2.10.5 09/22/17
- 2.8.6 → 2.9.5 no changes
- 2.7.6 07/30/17
- 2.5.6 → 2.6.7 no changes
- 2.4.12 05/05/17
- 2.3.10 09/28/15
- 2.1.4 → 2.2.3 no changes
- 2.0.5 12/17/14
ÜBERSICHT
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--sparse] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize] [--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]
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.
- --sparse
-
Allow updating index entries outside of the sparse-checkout cone. Normally,
git add
refuses to update index entries whose paths do not fit within the sparse-checkout cone, since those files might be removed from the working tree without warning. See git-sparse-checkout[1] for more details. - -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 --interactive
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
-
Falls einige Dateien aufgrund von Fehlern bei der Indizierung nicht hinzugefügt werden konnten, bricht der Vorgang nicht ab, sondern fährt mit dem Hinzufügen der anderen fort. Der Befehl wird trotzdem mit einem Status ungleich Null beendet. Die Konfigurationsvariable
add.ignoreErrors
kann auf "true" gesetzt werden, um dies zum Standardverhalten zu machen. - --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
-
Apply the "clean" process freshly to all tracked files to forcibly add them again to the index. This is useful after changing
core.autocrlf
configuration or thetext
attribute in order to correct files added with wrong CRLF/LF line endings. This option implies-u
. Lone CR characters are untouched, thus while a CRLF cleans to LF, a CRCRLF sequence is only partially cleaned to CRLF. - --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:staged unstaged path 1: binary nothing foo.png 2: +403/-35 +1/-1 add-interactive.c
It shows that foo.png has differences from HEAD (but that is binary so line count cannot be shown) and there is no difference between indexed copy and the working tree version (if the working tree version were also different, binary would have been shown in place of nothing). The other file, add-interactive.c, has 403 lines added and 35 lines deleted if you commit what is in the index, but working tree file has further modifications (one addition and one deletion).
- 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:
staged unstaged path 1: binary nothing foo.png * 2: +403/-35 +1/-1 add-interactive.c
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
KONFIGURATION
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
GIT
Teil der git[1] Suite