Was ist der Unterschied zwischen "git add." Und "git add -u"?

75

Ich ging davon aus, dass beide gleich funktionieren. Beide fügen jede Datei zum Index hinzu. Aber ich scheine falsch zu sein.

  • Was ist der Unterschied zwischen git add .und git add -u?
TK.
quelle

Antworten:

77

Es ist eines der hier erwähnten Git-Fallstricke (vor Git 2.0).

git add . fügt nur hinzu, was vorhanden ist, nicht, was gelöscht wurde (falls verfolgt).

git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u .
git commit --amend

git add -A würde sich um beide Schritte kümmern ...


Mit Git 2.0 git add -Aist Standard .

git add <path>ist dasselbe wie " git add -A <path>" jetzt, so dass " git add dir/" Pfade bemerkt, die Sie aus dem Verzeichnis entfernt haben, und das Entfernen aufzeichnet.
In älteren Git-Versionen wurde " git add <path>" zum Ignorieren von Entfernungen verwendet.

Sie können " git add --ignore-removal <path>" sagen , um nur hinzugefügte oder geänderte Pfade hinzuzufügen <path>, wenn Sie dies wirklich möchten.


Warnung ( git1.8.3 April 2013, für das kommende git2.0 ).
Ich habe meine Antwort geändert, um zu sagen git add -u ., anstatt git add -u.:

git add -uwird den gesamten Baum in Git 2.0 bearbeiten, um die Konsistenz mit " git commit -a" und anderen Befehlen zu gewährleisten.
Da es keinen Mechanismus gibt, mit dem sich " git add -u" als " " verhält git add -u ., ist es wichtig, dass diejenigen, die es gewohnt sind, git add -uden Index "(ohne Pfadangabe)" nur für Pfade im aktuellen Unterverzeichnis zu aktualisieren, ihre Finger trainieren, um explizit " git add -u ." zu sagen. wenn sie es ernst meinen, bevor Git 2.0 kommt.

Wie ich in " e " erwähnt habe

VonC
quelle
5
Vielen Dank für Ihre Antwort und ein Beispiel. Das "hey!" Linie hilft mir wirklich.
TK.
@TK: Ja, das Beispiel von Benjol ( stackoverflow.com/users/11410/benjol) ist gut.
VonC
Es scheint, dass wir die .(Pfadspezifikation) nicht mit Git 2.x setzen müssen. Es funktioniert zu finden, wenn ich getestet habe.
Sanghyun Lee
Ab Git 2.0 werden außerdem git add .alle Änderungen am Index hinzugefügt, da die -AOption standardmäßig aktiviert ist. Überprüfen Sie diese Antwort stackoverflow.com/a/26343584/524588
Sanghyun Lee
@ Sangdol Danke für diese Erinnerung. Ich habe die Antwort entsprechend aktualisiert.
VonC
23

Wie im Handbuch angegeben: git add .Fügt alle Dateien im aktuellen Verzeichnis hinzu, während git add -u .nur die bereits verfolgten Dateien hinzugefügt werden.

Benjamin Bannier
quelle
10
add -uwird auch Löschungen inszenieren.
CB Bailey
nur wenn die gelöschte Datei verfolgt wurde;)
Benjamin Bannier
add -u ist das Commit -a-Äquivalent (in Dateien, mit denen es arbeitet).
Lakshman Prasad
Bannier: Wenn die gelöschte Datei nicht verfolgt wurde, kann trotzdem nichts aus dem Staging-Bereich gelöscht werden?
CB Bailey
13

git Dokumentation hinzufügen

git add . 

Fügen Sie alle Dateien aus dem aktuellen Verzeichnis hinzu

git add -u 

Aktualisieren Sie nur Dateien, die gerade verfolgt werden.

Derek Swingley
quelle
Vielleicht Unterschiede zwischen Git 2.0 und Versionen von Git davor abdecken?
Peter Mortensen