git add
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>...]Optionen
Die richtige Option wählen
Befehle zum Stagen
Welche Dateien mit welchem Befehl gestagt werden
| Befehl | Neue Dateien | Geänderte Dateien | Gelöschte Dateien | Umfang |
|---|---|---|---|---|
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
| Befehl | Modus | Granularität | Anwendungsfall |
|---|---|---|---|
git add -p | Patch | Hunk für Hunk | Bestimmte Änderungen in einer Datei stagen |
git add -e | Editor | Zeile für Zeile | Diff vor dem Stagen von Hand bearbeiten |
git add -i | Menü | Datei für Datei | Vollständiges interaktives Staging-Menü |
Vorschau- und Ausgabeoptionen
Optionen, die Informationen zeigen, ohne den Staging-Bereich zu ändern
| Befehl | Aktion | Ändert den Index | Zweck |
|---|---|---|---|
git add -n | Dry-Run | ✗ | Vorschau, was gestagt würde |
git add -v | Ausführlich | ✓ | Dateien beim Stagen anzeigen |
git add --refresh | Auffrischen | ✗ | Nur Stat-Infos aktualisieren |
Besondere Dateien
Optionen für Dateien, die eine Sonderbehandlung brauchen
| Befehl | Behandelt | Verhalten | Typische Nutzung |
|---|---|---|---|
git add -f | Ignorierte Dateien | .gitignore übergehen | Eine normalerweise ignorierte Datei hinzufügen |
git add -N | Neue Dateien | Hinzufügen vormerken (leer) | Datei für git diff verfolgen, ohne sie zu stagen |
git add --chmod=+x | Ausführbare Dateien | Dateimodus setzen | Skripte ausführbar machen |
git add --sparse | Sparse-Dateien | Außerhalb des Cones | Dateien außerhalb des Sparse-Checkouts stagen |
Fortgeschrittene Optionen
Optionen für Profis in speziellen Situationen
| Befehl | Zweck | Wann verwenden |
|---|---|---|
git add --renormalize | Clean-Filter erneut anwenden | Nach dem Ändern der Zeilenenden in .gitattributes |
git add --pathspec-from-file | Pfade aus einer Datei lesen | Viele Dateien aus einer Liste stagen |
git add --ignore-errors | Trotz Fehlern weitermachen | Stagen, was geht, Fehlschläge überspringen |
git add --no-warn-embedded-repo | Submodul-Warnung unterdrücken | Absichtlich verschachtelte Repos hinzufügen |
Workflow-Beispiele
git statusZuerst alle Änderungen prüfen
git add -AAlle neuen, geänderten und gelöschten Dateien stagen
git commit -m "Your message"Alle gestagten Änderungen committen
git add -pInteraktiv nur die Bugfix-Änderungen auswählen (drücke 'y' für Bugfix-Hunks, 'n' für Feature-Hunks)
git commit -m "Fix login validation bug"Nur den Bugfix committen
git add -AJetzt die übrigen Feature-Änderungen stagen
git commit -m "Add dark mode toggle"Das Feature separat committen
git statusSehen, was geändert und was unverfolgt ist
git add -uNur Änderungen an verfolgten Dateien stagen
git statusPrüfen, dass die neuen Dateien noch unverfolgt sind
git commit -m "Update existing files"Ohne die neuen Dateien committen
git add -n .Der Dry-Run zeigt, was hinzugefügt würde
git diffDie tatsächlichen Änderungen im Detail prüfen
git add .Wenn alles passt, wirklich stagen
git add dist/bundle.jsDas schlägt fehl - die Datei wird ignoriert
git add -f dist/bundle.jsErzwungenes Hinzufügen übergeht .gitignore
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
-pInteraktiver Modus
-iFehlerbehebung
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 statusNeue 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 diffWarnung ü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
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.
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>'.
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.
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.
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.
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'.
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.
Nein, Git verfolgt nur Dateien, keine Verzeichnisse. Der übliche Trick ist eine .gitkeep- oder .gitignore-Datei im leeren Verzeichnis.