Git
Deutsch ▾ Topics ▾ Latest version ▾ git-add last updated in 2.27.0

NAME

git-add - Fügt Datei-Inhalte zum Index hinzu

Ü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, um dir/file1 und dir/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 von dir nicht nur eine im Arbeitsbereich modifizierte Datei dir/file1, eine zum Arbeitsbereich hinzugefügte Datei dir/file2, sondern auch eine aus dem Arbeitsbereich entfernte Datei dir/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 Unterbefehl patch 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 mit git 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 dass git 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-Variable core.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 dem Documentation 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 des Documentation/ 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 einem git commit mittels git-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 auf true 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