English ▾ Themen ▾ Neueste Version ▾ git-add zuletzt aktualisiert in 2.52.0

NAME

git-add - Fügt Dateiinhalte zum Index hinzu

SYNOPSIS

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
	[--edit | -e] [--[no-]all | -A | --[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

Fügt Inhalte von neuen oder geänderten Dateien zum Index hinzu. Der "Index" (auch bekannt als "Staging Area") ist das, was Sie verwenden, um die Inhalte des nächsten Commits vorzubereiten.

Wenn Sie git commit ohne weitere Argumente ausführen, werden nur die gestagten Änderungen committet. Wenn Sie beispielsweise file.c bearbeitet haben und Ihre Änderungen an dieser Datei committen möchten, können Sie Folgendes ausführen:

git add file.c
git commit

Sie können auch nur Teile Ihrer Änderungen an einer Datei mit git add -p hinzufügen.

Dieser Befehl kann mehrmals vor einem Commit ausgeführt werden. Er fügt nur den Inhalt der angegebenen Datei(en) zum Zeitpunkt der Ausführung des add-Befehls hinzu. Wenn Sie möchten, dass spätere Änderungen im nächsten Commit enthalten sind, müssen Sie git add erneut ausführen, um den neuen Inhalt zum Index hinzuzufügen.

Der Befehl git status kann verwendet werden, um eine Zusammenfassung darüber zu erhalten, welche Dateien Änderungen aufweisen, die für den nächsten Commit gestaged sind.

Der Befehl git add fügt standardmäßig keine ignorierten Dateien hinzu. Sie können die Option --force verwenden, um ignorierte Dateien hinzuzufügen. Wenn Sie den exakten Dateinamen einer ignorierten Datei angeben, schlägt git add mit einer Liste der ignorierten Dateien fehl. Andernfalls wird die Datei stillschweigend ignoriert.

Siehe git-commit[1] für alternative Möglichkeiten, Inhalte zu einem Commit hinzuzufügen.

OPTIONEN

<pathspec>...

Dateien, aus denen Inhalte hinzugefügt werden sollen. Dateimuster (z.B. *.c) können angegeben werden, um alle passenden Dateien hinzuzufügen. Auch ein führender Verzeichnisname (z.B. dir, um dir/file1 und dir/file2 hinzuzufügen) kann angegeben werden, um den Index so anzupassen, dass er den aktuellen Zustand des Verzeichnisses als Ganzes widerspiegelt (z.B. die Angabe von dir zeichnet nicht nur eine im Arbeitsbaum geänderte Datei dir/file1 und eine zum Arbeitsbaum hinzugefügte Datei dir/file2 auf, sondern auch eine aus dem Arbeitsbaum entfernte Datei dir/file3). Beachten Sie, dass ältere Git-Versionen entfernte Dateien ignorierten; verwenden Sie die Option --no-all, wenn Sie geänderte oder neue Dateien hinzufügen, aber entfernte ignorieren möchten.

Weitere Details zur <pathspec>-Syntax finden Sie im Eintrag pathspec in gitglossary[7].

-n
--dry-run

Fügt die Datei(en) nicht tatsächlich hinzu, sondern zeigt nur an, ob sie existieren und/oder ignoriert werden.

-v
--verbose

Ausführlich sein.

-f
--force

Erlaubt das Hinzufügen von ansonsten ignorierten Dateien.

--sparse

Erlaubt das Aktualisieren von Index-Einträgen außerhalb des Sparse-Checkout-Kegels. Normalerweise weigert sich git add, Index-Einträge zu aktualisieren, deren Pfade nicht in den Sparse-Checkout-Kegel passen, da diese Dateien ohne Vorwarnung aus dem Arbeitsbaum entfernt werden könnten. Siehe git-sparse-checkout[1] für weitere Details.

-i
--interactive

Fügt geänderte Inhalte im Arbeitsbaum interaktiv zum Index hinzu. Optionale Pfadargumente können angegeben werden, um die Operation auf einen Teil des Arbeitsbaums zu beschränken. Siehe "Interaktiver Modus" für Details.

-p
--patch

Wählt interaktiv Hunks von Patches zwischen dem Index und dem Arbeitsbaum aus und fügt sie dem Index hinzu. Dies gibt dem Benutzer die Möglichkeit, die Unterschiede zu überprüfen, bevor geänderte Inhalte zum Index hinzugefügt werden.

Dies führt effektiv add --interactive aus, umgeht aber das anfängliche Menü und springt direkt zum Unterbefehl patch. Siehe "Interaktiver Modus" für Details.

-U<n>
--unified=<n>

Generiert Diffs mit <n> Zeilen Kontext. Standard ist diff.context oder 3, wenn die Konfigurationsoption nicht gesetzt ist.

--inter-hunk-context=<n>

Zeigt den Kontext zwischen Diff-Hunks bis zur angegebenen Anzahl von <n> Zeilen an und fasst so nahe beieinander liegende Hunks zusammen. Standard ist diff.interHunkContext oder 0, wenn die Konfigurationsoption nicht gesetzt ist.

-e
--edit

Öffnet den Diff zum Index in einem Editor und lässt den Benutzer ihn bearbeiten. Nach dem Schließen des Editors werden die Hunk-Header angepasst und der Patch auf den Index angewendet.

Die Absicht dieser Option ist es, Zeilen des Patches auszuwählen und zu wählen oder sogar den Inhalt der Zeilen zu ändern, die gestaged werden sollen. Dies kann schneller und flexibler sein als die Verwendung des interaktiven Hunk-Selectors. Es ist jedoch leicht, sich selbst zu verwirren und einen Patch zu erstellen, der nicht auf den Index angewendet werden kann. Siehe EDITING PATCHES unten.

-u
--update

Aktualisiert den Index nur dort, wo bereits ein Eintrag vorhanden ist, der mit <pathspec> übereinstimmt. Dies entfernt sowie modifiziert Index-Einträge, um mit dem Arbeitsbaum übereinzustimmen, fügt aber keine neuen Dateien hinzu.

Wenn keine <pathspec> angegeben ist, wenn die Option -u verwendet wird, werden alle verfolgten Dateien im gesamten Arbeitsbaum aktualisiert (alte Git-Versionen beschränkten die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse).

-A
--all
--no-ignore-removal

Aktualisiert den Index nicht nur dort, wo der Arbeitsbaum eine Datei hat, die mit <pathspec> übereinstimmt, sondern auch dort, wo der Index bereits einen Eintrag hat. Dies fügt hinzu, modifiziert und entfernt Index-Einträge, um mit dem Arbeitsbaum übereinzustimmen.

Wenn keine <pathspec> angegeben ist, wenn die Option -A verwendet wird, werden alle Dateien im gesamten Arbeitsbaum aktualisiert (alte Git-Versionen beschränkten die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse).

--no-all
--ignore-removal

Aktualisiert den Index, indem neue, dem Index unbekannte Dateien und im Arbeitsbaum geänderte Dateien hinzugefügt werden, aber Dateien, die aus dem Arbeitsbaum entfernt wurden, ignoriert werden. Diese Option ist ein No-Op, wenn keine <pathspec> verwendet wird.

Diese Option richtet sich hauptsächlich an Benutzer, die an ältere Git-Versionen gewöhnt sind, deren git add <pathspec>... ein Synonym für git add --no-all <pathspec>... war, d.h. entfernte Dateien ignoriert wurden.

-N
--intent-to-add

Zeichnet nur die Tatsache auf, dass der Pfad später hinzugefügt wird. Ein Eintrag für den Pfad wird im Index ohne Inhalt platziert. Dies ist unter anderem nützlich, um den ungestagten Inhalt solcher Dateien mit git diff anzuzeigen und sie mit git commit -a zu committen.

--refresh

Fügt die Datei(en) nicht hinzu, sondern aktualisiert nur deren stat()-Informationen im Index.

--ignore-errors

Wenn einige Dateien aufgrund von Fehlern bei der Indexierung nicht hinzugefügt werden konnten, brechen Sie die Operation nicht ab, sondern fügen Sie die anderen hinzu. Der Befehl wird trotzdem mit einem nicht-null Status 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 überprüfen, ob eine der angegebenen Dateien ignoriert würde, unabhängig davon, ob sie bereits im Arbeitsbaum vorhanden ist oder nicht.

--no-warn-embedded-repo

Standardmäßig gibt git add eine Warnung aus, wenn ein eingebettetes Repository zum Index hinzugefügt wird, ohne git submodule add zu verwenden, um einen Eintrag in .gitmodules zu erstellen. Diese Option unterdrückt die Warnung (z. B. wenn Sie manuell Operationen mit Submodulen durchführen).

--renormalize

Wendet den "clean"-Prozess frisch auf alle verfolgten Dateien an, um sie erneut zum Index hinzuzufügen. Dies ist nützlich nach der Änderung der Konfiguration core.autocrlf oder des Attributs text, um Dateien zu korrigieren, die mit falschen CRLF/LF-Zeilenenden hinzugefügt wurden. Diese Option impliziert -u. Einzelne CR-Zeichen bleiben unverändert, sodass ein CRLF zu LF bereinigt wird, eine CRCRLF-Sequenz jedoch nur teilweise zu CRLF.

--chmod=(+|-)x

Überschreibt das ausführbare Bit der hinzugefügten Dateien. Das ausführbare Bit wird nur im Index geändert, die Dateien auf der Festplatte bleiben unverändert.

--pathspec-from-file=<file>

Pathspec wird in <file> anstelle von Kommandozeilenargumenten übergeben. Wenn <file> exakt - ist, wird die Standardeingabe verwendet. Pathspec-Elemente werden durch LF oder CR/LF getrennt. Pathspec-Elemente können wie für die Konfigurationsvariable core.quotePath erklärt (siehe git-config[1]) zitiert werden. Siehe auch --pathspec-file-nul und global --literal-pathspecs.

--pathspec-file-nul

Nur relevant mit --pathspec-from-file. Pfadangaben werden durch ein NUL-Zeichen getrennt und alle anderen Zeichen werden wörtlich genommen (einschließlich Zeilenumbrüchen und Anführungszeichen).

--

Diese Option kann verwendet werden, um Kommandozeilenoptionen von der Liste der Dateien zu trennen (nützlich, wenn Dateinamen mit Kommandozeilenoptionen verwechselt werden könnten).

BEISPIELE

  • Fügt Inhalte aus allen *.txt-Dateien im Verzeichnis Documentation und seinen Unterverzeichnissen hinzu

    $ git add Documentation/\*.txt

    Beachten Sie, dass der Stern * in diesem Beispiel von der Shell maskiert wird; dies ermöglicht es dem Befehl, die Dateien aus den Unterverzeichnissen des Documentation/-Verzeichnisses einzubeziehen.

  • Betrachtet das Hinzufügen von Inhalten aus allen git-*.sh-Skripten

    $ git add git-*.sh

    Da dieses Beispiel die Shell den Stern erweitern lässt (d.h. Sie listen die Dateien explizit auf), werden subdir/git-foo.sh nicht berücksichtigt.

INTERAKTIVER MODUS

Wenn der Befehl in den interaktiven Modus wechselt, zeigt er die Ausgabe des Unterbefehls status an und wechselt dann in seine interaktive Befehlsschleife.

Die Befehlsschleife zeigt die Liste der verfügbaren Unterbefehle an und gibt eine Eingabeaufforderung "What now> " aus. Im Allgemeinen können Sie, wenn die Eingabeaufforderung mit einem einzelnen > endet, nur eine der angezeigten Optionen auswählen und Enter drücken, wie hier:

    *** Commands ***
      1: status       2: update       3: revert       4: add untracked
      5: patch        6: diff         7: quit         8: help
    What now> 1

Sie könnten auch s oder sta oder status oben sagen, solange die Wahl eindeutig ist.

Die Hauptbefehlsschleife hat 6 Unterbefehle (plus Hilfe und Beenden).

status

Dies zeigt den Unterschied zwischen HEAD und dem Index an (d.h. was committet wird, wenn Sie git commit sagen) und zwischen dem Index und den Arbeitsbaumdateien (d.h. was Sie vor git commit mit git add weiter stagen könnten) für jeden Pfad. Eine Beispielausgabe sieht so aus:

              staged     unstaged path
     1:       binary      nothing foo.png
     2:     +403/-35        +1/-1 add-interactive.c

Sie zeigt, dass foo.png Unterschiede zu HEAD aufweist (aber das ist binär, daher kann die Zeilenanzahl nicht angezeigt werden) und dass es keinen Unterschied zwischen der indizierten Kopie und der Arbeitsbaumversion gibt (wenn die Arbeitsbaumversion ebenfalls unterschiedlich wäre, wäre anstelle von nichts binär angezeigt worden). Die andere Datei, add-interactive.c, hat 403 Zeilen hinzugefügt und 35 Zeilen gelöscht, wenn Sie das, was sich im Index befindet, committen, aber die Arbeitsbaumdatei hat weitere Änderungen (eine Hinzufügung und eine Löschung).

update

Dies zeigt die Statusinformationen an und gibt eine "Update>>"-Eingabeaufforderung aus. Wenn die Eingabeaufforderung mit doppelten >> endet, können Sie mehrere Auswahlen treffen, die mit Leerzeichen oder Kommas verknüpft sind. Sie können auch Bereiche angeben. Z.B. "2-5 7,9" wählt 2,3,4,5,7,9 aus der Liste aus. Wenn die zweite Zahl in einem Bereich weggelassen wird, werden alle verbleibenden Patches übernommen. Z.B. "7-" wählt 7,8,9 aus der Liste aus. Sie können * sagen, um alles auszuwählen.

Die von Ihnen ausgewählten Elemente werden dann mit * hervorgehoben, wie hier:

           staged     unstaged path
  1:       binary      nothing foo.png
* 2:     +403/-35        +1/-1 add-interactive.c

Um eine Auswahl zu entfernen, stellen Sie der Eingabe ein - voran, wie hier:

Update>> -2

Nachdem Sie die Auswahl getroffen haben, antworten Sie mit einer leeren Zeile, um die Inhalte von Arbeitsbaumdateien für die ausgewählten Pfade im Index zu stagen.

revert

Dies hat eine sehr ähnliche Benutzeroberfläche wie update, und die gestagten Informationen für ausgewählte Pfade werden auf die HEAD-Version zurückgesetzt. Das Zurücksetzen neuer Pfade macht sie untracked.

add untracked

Dies hat eine sehr ähnliche Benutzeroberfläche wie update und revert und ermöglicht es Ihnen, untracked Pfade zum Index hinzuzufügen.

patch

Dies ermöglicht es Ihnen, einen Pfad aus einer status-ähnlichen Auswahl auszuwählen. Nach der Auswahl des Pfades wird der Unterschied zwischen dem Index und der Arbeitsbaumdatei angezeigt, und es wird gefragt, ob Sie die Änderung jedes Hunks stagen möchten. Sie können eine der folgenden Optionen auswählen und Enter drücken:

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - go to the next undecided hunk, roll over at the bottom
J - go to the next hunk, roll over at the bottom
k - go to the previous undecided hunk, roll over at the top
K - go to the previous hunk, roll over at the top
s - split the current hunk into smaller hunks
e - manually edit the current hunk
p - print the current hunk
P - print the current hunk using the pager
? - print help

Nachdem Sie über alle Hunks entschieden haben, wird der Index mit den ausgewählten Hunks aktualisiert, wenn es Hunks gab, die ausgewählt wurden.

Sie können das Drücken von Enter hier vermeiden, indem Sie die Konfigurationsvariable interactive.singleKey auf true setzen.

diff

Dies ermöglicht Ihnen zu überprüfen, was committet wird (d.h. zwischen HEAD und dem Index).

PATCHES BEARBEITEN

Das Aufrufen von git add -e oder die Auswahl von e aus dem interaktiven Hunk-Selektor öffnet einen Patch in Ihrem Editor; nach dem Schließen des Editors wird das Ergebnis auf den Index angewendet. Sie können beliebige Änderungen am Patch vornehmen, aber beachten Sie, dass einige Änderungen verwirrende Ergebnisse haben oder sogar zu einem Patch führen können, der nicht angewendet werden kann. Wenn Sie den Vorgang ganz abbrechen möchten (d.h. nichts Neues in den Index stagen), löschen Sie einfach alle Zeilen des Patches. Die folgende Liste beschreibt einige gängige Dinge, die Sie in einem Patch sehen können, und welche Bearbeitungsoperationen sinnvoll sind.

hinzugefügter Inhalt

Hinzugefügter Inhalt wird durch Zeilen dargestellt, die mit "+" beginnen. Sie können das Stagen von Hinzufügungszeilen verhindern, indem Sie sie löschen.

entfernter Inhalt

Entfernter Inhalt wird durch Zeilen dargestellt, die mit "-" beginnen. Sie können das Stagen ihrer Entfernung verhindern, indem Sie das "-" in ein " " (Leerzeichen) umwandeln.

geänderter Inhalt

Geänderter Inhalt wird durch "-" Zeilen (Entfernung des alten Inhalts) gefolgt von "+" Zeilen (Hinzufügung des Ersatzinhalts) dargestellt. Sie können das Stagen der Änderung verhindern, indem Sie "-" Zeilen in " " umwandeln und "+" Zeilen löschen. Beachten Sie, dass die Änderung nur der Hälfte des Paares wahrscheinlich verwirrende Änderungen im Index einführt.

Es gibt auch komplexere Operationen, die durchgeführt werden können. Aber beachten Sie, dass der Arbeitsbaum die Änderung im Index zu "rückgängig machen" scheint, da der Patch nur auf den Index und nicht auf den Arbeitsbaum angewendet wird. Zum Beispiel wird das Einfügen einer neuen Zeile in den Index, die weder in HEAD noch im Arbeitsbaum vorhanden ist, die neue Zeile für den Commit stagen, aber die Zeile wird im Arbeitsbaum als rückgängig gemacht erscheinen.

Vermeiden Sie die Verwendung dieser Konstrukte oder tun Sie dies mit äußerster Vorsicht.

Entfernen von unberührtem Inhalt

Inhalt, der sich zwischen Index und Arbeitsbaum nicht unterscheidet, kann als Kontextzeilen angezeigt werden, die mit einem " " (Leerzeichen) beginnen. Sie können Kontextzeilen zum Entfernen stagen, indem Sie das Leerzeichen in ein "-" umwandeln. Die resultierende Arbeitsbaumdatei wird den Inhalt wieder hinzuzufügen scheinen.

Ändern von vorhandenem Inhalt

Man kann auch Kontextzeilen ändern, indem man sie zum Entfernen stagt (indem man " " in "-" umwandelt) und eine "+" Zeile mit dem neuen Inhalt hinzufügt. Ähnlich kann man "+" Zeilen für bestehende Hinzufügungen oder Änderungen ändern. In allen Fällen wird die neue Änderung im Arbeitsbaum als rückgängig gemacht erscheinen.

neuer Inhalt

Sie können auch neuen Inhalt hinzufügen, der im Patch nicht vorhanden ist; fügen Sie einfach neue Zeilen hinzu, die jeweils mit "+" beginnen. Die Hinzufügung wird im Arbeitsbaum als rückgängig gemacht erscheinen.

Es gibt auch mehrere Operationen, die vollständig vermieden werden sollten, da sie dazu führen, dass der Patch nicht angewendet werden kann.

  • Hinzufügen von Kontext- (" ") oder Entfernung- ("-") Zeilen

  • Löschen von Kontext- oder Entfernung-Zeilen

  • Ändern des Inhalts von Kontext- oder Entfernung-Zeilen

KONFIGURATION

Alles unterhalb dieser Zeile in diesem Abschnitt wird selektiv aus der git-config[1]-Dokumentation übernommen. Der Inhalt ist derselbe wie dort zu finden.

add.ignoreErrors
add.ignore-errors (veraltet)

Weist git add an, mit dem Hinzufügen von Dateien fortzufahren, wenn einige Dateien aufgrund von Indexierungsfehlern nicht hinzugefügt werden können. Entspricht der Option --ignore-errors. add.ignore-errors ist veraltet, da es nicht der üblichen Namenskonvention für Konfigurationsvariablen folgt.

GIT

Teil der git[1] Suite