git add

Grundlegende Snapshots

Dateiinhalte zum Index (Staging-Bereich) hinzufügen


Der Befehl 'git add' aktualisiert den Index mit dem aktuellen Inhalt des Arbeitsbaums, um den Inhalt für den nächsten Commit vorzubereiten. Der Index, auch Staging-Bereich genannt, ist der Ort, an dem du den Inhalt des nächsten Commits vorbereitest. Wenn du 'git commit' ohne weitere Argumente ausführst, werden nur gestagte Änderungen committet. Der Befehl kann vor einem Commit mehrmals ausgeführt werden, um Änderungen schrittweise hinzuzufügen.

Syntax

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--all | -A] [--update | -u] [--] [<pathspec>...]
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (4)

Alles auf einmal stagen - alle neuen Dateien, Änderungen und Löschungen im ganzen Projekt.

Bei BedarfStagt alles, auch Löschungen – prüfe vorher git status, damit nichts Unerwünschtes hineinrutscht

Beispiel

git add -A

Nur Änderungen an Dateien stagen, die Git schon kennt. Neue unverfolgte Dateien werden ignoriert.

Bei BedarfStagt nur Änderungen an getrackten Dateien – praktisch, wenn neue Dateien noch nicht fertig sind

Beispiel

git add -u

Genau sehen, welche Dateien beim Ausführen gestagt werden. Gibt jeden Dateinamen aus, sobald er hinzugefügt wird.

Bei BedarfListet jede Datei beim Stagen auf; nützlich bei großen adds

Beispiel

git add -v .

Vorschau, was gestagt würde, ohne etwas zu stagen. Ideal zum Gegenprüfen vor dem Commit.

EmpfohlenHarmlose Vorschau dessen, was ein breites add stagen würde

Beispiel

git add -n .

Fortgeschritten (5)

Interaktiv auswählen, welche Teile einer Datei gestagt werden. Perfekt, um große Änderungen in fokussierte Commits aufzuteilen.

EmpfohlenPrüfe und stage genau die Hunks, die in diesen Commit gehören

Beispiel

git add -p

Eine vollständige menügeführte Oberfläche zum Stagen öffnen. Bietet interaktives Stagen, Unstagen und Prüfen von Änderungen.

Bei BedarfStagen per Menü; -p deckt das meiste direkter ab

Beispiel

git add -i

Eine Datei stagen, die .gitignore normalerweise ignoriert. Nutze das, wenn du Ignorier-Regeln übergehen musst.

Bei BedarfStagt ignorierte Dateien – stell sicher, dass die Datei wirklich ins Repository gehört

Beispiel

git add -f dist/bundle.js

Festhalten, dass eine Datei später hinzugefügt wird, ohne ihren Inhalt zu stagen. Praktisch, um neue Dateien in 'git diff' zu zeigen.

Bei BedarfMacht neue Dateien für git diff und add -p sichtbar, bevor du sie stagst

Beispiel

git add -N newfile.js

Die Warnung beim Hinzufügen eines eingebetteten Repositorys (ein Ordner mit eigenem .git) zum Index unterdrücken. Nutze das, wenn du absichtlich ein verschachteltes Git-Repo hinzufügen willst.

Nicht empfohlenMeist willst du git submodule add statt eines bloßen eingebetteten Repos

Beispiel

git add --no-warn-embedded-repo vendor/library

Erfahren (6)

Den Diff vor dem Stagen im Editor öffnen. Du kannst von Hand auswählen, welche Änderungen hineinkommen.

Bei BedarfDen Diff vor dem Stagen von Hand bearbeiten; dabei entsteht leicht ein Patch, der sich nicht anwenden lässt

Beispiel

git add -e app.js

Keine Dateien hinzufügen, nur ihre stat()-Infos im Index aktualisieren. Braucht eine Pathspec. Nützlich nach Änderungen, die nur Zeitstempel betreffen.

Bei BedarfFrischt nur die Dateiinfos im Index auf; git status macht das bereits

Beispiel

git add --refresh .

Weiter Dateien hinzufügen, auch wenn einige mit Fehlern scheitern. Der Befehl endet trotzdem mit einem Status ungleich null.

Bei BedarfÜberspringt Dateien, die nicht hinzugefügt werden können; der Befehl endet trotzdem mit Status ungleich null

Beispiel

git add --ignore-errors .

Prüfen, ob Dateien ignoriert würden, auch wenn sie noch nicht existieren. Funktioniert nur mit --dry-run.

Bei BedarfNur mit --dry-run: prüft Ignore-Regeln auch für fehlende Pfade

Beispiel

git add -n --ignore-missing *.tmp

Neue und geänderte Dateien stagen, aber aus dem Arbeitsbaum entfernte Dateien ignorieren. Alias: --ignore-removal. Wirkt nur zusammen mit einer Pathspec (z. B. git add --no-all .).

Nicht empfohlenAltes Verhalten von vor 2.0, das Löschungen stillschweigend nicht stagt

Beispiel

git add --no-all .

Die von -p/-i gezeigten Hunks mit <n> Kontextzeilen statt der standardmäßigen 3 (oder diff.context) erzeugen. Erfordert Git 2.51 oder neuer – ältere Versionen lehnen es mit "unknown switch `U'" ab.

Bei BedarfMehr Kontextzeilen in den Hunks von add -p – braucht Git 2.51 oder neuer

Beispiel

git add -p -U5 app.js

Experte (6)

Das Ausführbar-Bit hinzugefügter Dateien überschreiben. +x macht ausführbar, -x entfernt es.

Bei BedarfSetzt das Ausführbar-Bit im Index – nützlich unter Windows

Beispiel

git add --chmod=+x script.sh

Den 'clean'-Filter erneut auf alle verfolgten Dateien anwenden. Nützlich nach geänderten Zeilenend-Einstellungen.

Bei BedarfEinmal ausführen, nachdem die Zeilenend-Regeln in .gitattributes geändert wurden

Beispiel

git add --renormalize .

Das Aktualisieren von Index-Einträgen außerhalb des Sparse-Checkout-Cones erlauben. Nur für fortgeschrittene Sparse-Checkouts.

Bei BedarfNur für Sparse-Checkout-Repos, die Pfade außerhalb des Cones bearbeiten

Beispiel

git add --sparse path/outside/cone

Dateipfade aus einer Datei statt von der Befehlszeile lesen. Mit '-' wird von stdin gelesen.

Bei BedarfFür Skripte mit vielen Pfaden; umgeht Längenbeschränkungen der Befehlszeile

Beispiel

git add --pathspec-from-file=files.txt

In -p/-i den Kontext zwischen Hunks bis zur angegebenen Zeilenzahl zeigen und nahe beieinanderliegende Hunks zu einem verschmelzen (Standard 0 oder diff.interHunkContext). Erfordert Git 2.51 oder neuer.

Bei BedarfVerschmilzt nahe Hunks in add -p – braucht Git 2.51 oder neuer

Beispiel

git add -p --inter-hunk-context=5

Wird mit --pathspec-from-file genutzt. Pathspec-Elemente werden durch NUL-Zeichen statt Zeilenumbrüche getrennt. Kommt mit Dateinamen mit Sonderzeichen zurecht.

Bei BedarfErgänzung zu --pathspec-from-file für Namen mit Zeilenumbrüchen oder ungewöhnlichen Zeichen

Beispiel

git add --pathspec-from-file=files.txt --pathspec-file-nul

Die richtige Option wählen

Befehle zum Stagen

Welche Dateien mit welchem Befehl gestagt werden

BefehlNeue DateienGeänderte DateienGelöschte DateienUmfang
git add <file>✓✓✓Nur die angegebene Datei
git add .✓✓✓Aktuelles Verzeichnis und darunter
git add -A✓✓✓Ganzes Repository
git add -u✗✓✓Nur verfolgte Dateien
git add --no-all✓✓✗Ignoriert Löschungen

Interaktive Optionen

Optionen, um fein zu steuern, was gestagt wird

BefehlModusGranularitätAnwendungsfall
git add -pPatchHunk für HunkBestimmte Änderungen in einer Datei stagen
git add -eEditorZeile für ZeileDiff vor dem Stagen von Hand bearbeiten
git add -iMenüDatei für DateiVollständiges interaktives Staging-Menü

Vorschau- und Ausgabeoptionen

Optionen, die Informationen zeigen, ohne den Staging-Bereich zu ändern

BefehlAktionÄndert den IndexZweck
git add -nDry-Run✗Vorschau, was gestagt würde
git add -vAusführlich✓Dateien beim Stagen anzeigen
git add --refreshAuffrischen✗Nur Stat-Infos aktualisieren

Besondere Dateien

Optionen für Dateien, die eine Sonderbehandlung brauchen

BefehlBehandeltVerhaltenTypische Nutzung
git add -fIgnorierte Dateien.gitignore übergehenEine normalerweise ignorierte Datei hinzufügen
git add -NNeue DateienHinzufügen vormerken (leer)Datei für git diff verfolgen, ohne sie zu stagen
git add --chmod=+xAusführbare DateienDateimodus setzenSkripte ausführbar machen
git add --sparseSparse-DateienAußerhalb des ConesDateien außerhalb des Sparse-Checkouts stagen

Fortgeschrittene Optionen

Optionen für Profis in speziellen Situationen

BefehlZweckWann verwenden
git add --renormalizeClean-Filter erneut anwendenNach dem Ändern der Zeilenenden in .gitattributes
git add --pathspec-from-filePfade aus einer Datei lesenViele Dateien aus einer Liste stagen
git add --ignore-errorsTrotz Fehlern weitermachenStagen, was geht, Fehlschläge überspringen
git add --no-warn-embedded-repoSubmodul-Warnung unterdrückenAbsichtlich verschachtelte Repos hinzufügen

Workflow-Beispiele

1
git status

Zuerst alle Änderungen prüfen

2
git add -A

Alle neuen, geänderten und gelöschten Dateien stagen

3
git commit -m "Your message"

Alle gestagten Änderungen committen

1
git add -p

Interaktiv nur die Bugfix-Änderungen auswählen (drücke 'y' für Bugfix-Hunks, 'n' für Feature-Hunks)

2
git commit -m "Fix login validation bug"

Nur den Bugfix committen

3
git add -A

Jetzt die übrigen Feature-Änderungen stagen

4
git commit -m "Add dark mode toggle"

Das Feature separat committen

1
git status

Sehen, was geändert und was unverfolgt ist

2
git add -u

Nur Änderungen an verfolgten Dateien stagen

3
git status

Prüfen, dass die neuen Dateien noch unverfolgt sind

4
git commit -m "Update existing files"

Ohne die neuen Dateien committen

1
git add -n .

Der Dry-Run zeigt, was hinzugefügt würde

2
git diff

Die tatsächlichen Änderungen im Detail prüfen

3
git add .

Wenn alles passt, wirklich stagen

1
git add dist/bundle.js

Das schlägt fehl - die Datei wird ignoriert

2
git add -f dist/bundle.js

Erzwungenes Hinzufügen übergeht .gitignore

3
git commit -m "Add build for deployment"

Die normalerweise ignorierte Datei committen

Tasten im interaktiven Modus

Tastenkürzel für die interaktiven Modi von git add. Sie funktionieren im Patch-Modus (-p) und im interaktiven Modus (-i).

Patch-Modus

-p
yDiesen Hunk stagen
nDiesen Hunk nicht stagen
qBeenden; diesen und alle übrigen Hunks nicht stagen
aDiesen Hunk und alle folgenden in der Datei stagen
dDiesen Hunk und alle folgenden in der Datei nicht stagen
sDen aktuellen Hunk in kleinere Hunks aufteilen
eDen aktuellen Hunk von Hand bearbeiten
?Hilfe anzeigen

Interaktiver Modus

-i
1 / sStatus - aktuellen Staging-Zustand anzeigen
2 / uUpdate - Dateien zum Stagen auswählen
3 / rRevert - ausgewählte Dateien unstagen
4 / aAdd untracked - neue Dateien hinzufügen
5 / pPatch - Patch-Modus für ausgewählte Dateien starten
6 / dDiff - Diff der gestagten Änderungen anzeigen
7 / qBeenden
8 / hHilfe

Fehlerbehebung

Datei wird nicht hinzugefügt (ignoriert)

Ursache: Die Datei passt auf ein Muster in .gitignore

Suche in .gitignore nach dem passenden Muster. Nutze -f, um das Hinzufügen zu erzwingen, wenn es Absicht ist.

git add -f <file>

Fehler „Permission denied“

Ursache: Die Datei ist von einem anderen Prozess gesperrt, oder dir fehlen Leserechte

Schließe Programme, die die Datei nutzen, oder prüfe die Dateirechte. Nutze --ignore-errors, um mit den übrigen Dateien weiterzumachen.

git add --ignore-errors .

Bei git add passiert nichts

Ursache: Die Dateien sind vielleicht schon gestagt, oder es gibt keine Änderungen zum Hinzufügen

Führe git status aus, um den aktuellen Zustand zu sehen. Bereits gestagte Dateien werden nicht erneut hinzugefügt.

git status

Neue Dateien erscheinen nicht in git diff

Ursache: Unverfolgte Dateien erscheinen standardmäßig nicht in git diff

Nutze git add -N, um das Hinzufügen vorzumerken; dann zeigt git diff den Inhalt.

git add -N <file> && git diff

Warnung über ein eingebettetes Git-Repository

Ursache: Du fügst einen Ordner hinzu, der ein eigenes .git-Verzeichnis enthält (ein verschachteltes Repo)

Entferne den verschachtelten .git-Ordner, nutze Git-Submodule oder unterdrücke die Warnung.

git add --no-warn-embedded-repo <folder>

Zeilenenden erscheinen ständig als Änderungen

Ursache: Uneinheitliche Zeilenenden (CRLF vs. LF) zwischen deinem System und dem Repo

Konfiguriere .gitattributes mit 'text=auto' und renormalisiere alle Dateien.

git add --renormalize .

Skripte (z. B. git diff-files) melden Dateien als geändert, obwohl der Inhalt gleich ist

Ursache: Die Zeitstempel der Dateien haben sich geändert, also sind die im Index zwischengespeicherten Stat-Infos veraltet

Aktualisiere den Index, um die Stat-Infos zu erneuern, ohne zu stagen. (git status aktualisiert automatisch.)

git add --refresh .

Tipps & Stolperfallen

Best Practices

  • ✓Änderungen vor dem Stagen prüfen: Nutze 'git diff', um zu sehen, was du gleich stagst, oder 'git add -p', um interaktiv zu prüfen.
  • ✓Zusammengehörige Änderungen gemeinsam stagen: Fasse logisch zusammengehörige Änderungen in einem Commit zusammen. Mische keine Bugfixes mit neuen Features.
  • ✓Für große Änderungen 'git add -p' nutzen: Wenn du mehrere unabhängige Änderungen an einer Datei gemacht hast, stage sie im Patch-Modus getrennt.
  • ✓git status oft prüfen: Führe vor und nach dem Stagen immer 'git status' aus, um zu prüfen, was committet wird.
  • ✓Vorsicht mit 'git add .': Das stagt alles im aktuellen Verzeichnis. Nenne lieber gezielt Dateinamen oder nutze 'git add -p' für mehr Kontrolle.
  • ✓Zuerst .gitignore einrichten: Stelle vor deinem ersten 'git add' sicher, dass .gitignore Build-Artefakte, Abhängigkeiten und sensible Dateien ausschließt.
  • ✓Dry-Run zur Kontrolle nutzen: Im Zweifel zeigt 'git add -n .', was gestagt würde, ohne wirklich zu stagen.
  • ✓Löschungen ausdrücklich stagen: Eine lokal gelöschte Datei stagt die Löschung nicht. Nutze 'git add -u' oder 'git add -A', um Löschungen einzuschließen.

Häufige Fehler

  • ✗'git add .' oder 'git add -A': Beide stagen neue, geänderte und gelöschte Dateien, aber '.' deckt nur das aktuelle Verzeichnis und darunter ab, während '-A' den ganzen Arbeitsbaum abdeckt.
  • ✗Vergessen, dass 'git add' nicht committet. Die Dateien sind nur gestagt und brauchen 'git commit', um festgehalten zu werden.
  • ✗Dateien hinzufügen, die ignoriert werden sollten. Prüfe immer deine .gitignore, bevor du 'git add -A' oder 'git add .' ausführst.
  • ✗Änderungen vor dem Stagen nicht prüfen. Nutze 'git add -p', um genauer zu prüfen, was du stagst.
  • ✗'git add -u' mit 'git add -A' verwechseln: '-u' stagt nur Änderungen und Löschungen verfolgter Dateien, keine neuen unverfolgten Dateien.

FAQ

A:

Seit Git 2.0 stagen beide neue, geänderte und gelöschte Dateien. Der Unterschied ist der Umfang: 'git add .' deckt nur das aktuelle Verzeichnis und seine Unterverzeichnisse ab, während 'git add -A' das ganze Repository abdeckt, egal in welchem Verzeichnis du bist.

A:

Die Datei steht wahrscheinlich in .gitignore. Prüfe das mit 'git check-ignore <file>'. Wenn du sie trotzdem hinzufügen musst, erzwinge es mit 'git add -f <file>'.

A:

Ja! Nutze 'git restore --staged <file>' (oder 'git reset HEAD <file>' in älteren Git-Versionen), um eine Datei zu unstagen, ohne deine Änderungen zu verlieren.

A:

Nutze 'git add -p <file>', um in den interaktiven Patch-Modus zu wechseln. Git zeigt dir jede Änderung (Hunk) und lässt dich mit y/n wählen, welche gestagt wird.

A:

Meist liegt das an geänderten Zeilenenden (CRLF/LF) oder Dateirechten. Sieh mit 'git diff' nach, was sich geändert hat. Konfiguriere .gitattributes für die Zeilenenden.

A:

Trage die auszuschließenden Dateien zuerst in .gitignore ein und nutze dann 'git add .'. Alternativ füge Dateien einzeln hinzu oder nutze Muster wie 'git add *.js'.

A:

Es sagt Git, dass du die Datei später hinzufügen willst. Die Datei wird verfolgt (sie erscheint in git diff), aber ihr Inhalt ist noch nicht gestagt. Praktisch, um neue Dateien vor dem Commit zu prüfen.

A:

Nein, Git verfolgt nur Dateien, keine Verzeichnisse. Der übliche Trick ist eine .gitkeep- oder .gitignore-Datei im leeren Verzeichnis.