Antworten:
Diese Antwort gilt nur für Git - Version 1.x . Für Git Version 2.x siehe andere Antworten.
Zusammenfassung:
git add -A
inszeniert alle Änderungen
git add .
Stellt neue Dateien und Änderungen ohne Löschungen bereit
git add -u
Stellt Änderungen und Löschungen ohne neue Dateien bereit
Detail:
git add -A
ist äquivalent zu git add .; git add -u
.
Der wichtige Punkt dabei git add .
ist, dass der Arbeitsbaum betrachtet und alle diese Pfade zu den bereitgestellten Änderungen hinzugefügt werden, wenn sie entweder geändert oder neu sind und nicht ignoriert werden. Es werden keine "rm" -Aktionen ausgeführt.
git add -u
Überprüft alle bereits verfolgten Dateien und führt die Änderungen an diesen Dateien durch, wenn sie unterschiedlich sind oder entfernt wurden. Es werden keine neuen Dateien hinzugefügt, sondern nur Änderungen an bereits verfolgten Dateien vorgenommen.
git add -A
ist eine praktische Abkürzung für beide.
Sie können die Unterschiede testen , mit so etwas wie dieses (beachten Sie, dass für Git - Version Ihrer Ausgabe 2.x für git add .
git status
wird anders sein):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
git add -A -p
funktioniert nicht wie erwartet (fragen Sie interaktiv nach nicht verfolgten Dateien)
git add -A :/
odergit add -A .
git add -u
wurde git add -u :/
der letztere Parameter als Pfad verwendet, der es Ihnen ermöglicht, bestimmte Verzeichnisse zu verwenden und :/
den gesamten Baum zu behandeln.
git add -u
oder oder auf git add .
diese Weise sein Leben erleichtert, selbst nachdem die zusätzliche mentale Steuer berücksichtigt wurde, um sicherzustellen, dass keine Synchronisierungsprobleme auftreten? Ich frage mich, warum Git nicht weiter add -u
in zwei separate Befehle aufgeteilt wird add -u1
und add-u2
wobei einer für Dateien funktioniert, die mit Ziffern beginnen, und der andere für Dateien, die mit Nicht-Ziffern beginnen
Hier ist eine Tabelle zum schnellen Verständnis:
Git Version 1.x :
Git Version 2.x :
Langform-Flags:
git add -A
ist äquivalent zu git add --all
git add -u
ist äquivalent zu git add --update
Weiterführende Literatur:
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
nur die geänderten Dateien hinzufügen, nicht aber die neuen Dateien oder die Löschungen.
git add .
nur neue Dateien hinzugefügt werden, die sich auf dem aktuellen Pfad befinden. Dh wenn Sie ein neues Verzeichnis haben ../foo
, git add -A
wird es inszeniert, git add .
nicht.
git add .
ist äquivalent zu git add -A .
, was äquivalent istgit add "*"
Bei Git 2.0 git add -A
ist Standard: git add .
gleichgit add -A .
.
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 Versionen von Git wurden "git add <path>
" Entfernungen ignoriert.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.
git add -A
ist wie git add :/
( füge alles aus dem Top-Git-Repo-Ordner hinzu ).
Beachten Sie, dass Sie mit Git 2.7 (Nov. 2015) einen Ordner mit dem Namen " :
" hinzufügen können !
Siehe Commit 29abb33 (25. Oktober 2015) von Junio C Hamano ( gitster
) .
Beachten Sie, dass Sie ab Git 2.0 (Q1 oder Q2 2014) , wenn Sie über git add .
(aktueller Pfad innerhalb des Arbeitsbaums) sprechen , ' .
' auch in den anderen git add
Befehlen verwenden müssen.
Das bedeutet:
"
git add -A .
" entspricht "git add .; git add -u .
"
(Beachten Sie das zusätzliche ' .
' für git add -A
und git add -u
)
Weil git add -A
oder git add -u
würde (nur ab Git 2.0) für den gesamten Arbeitsbaum und nicht nur für den aktuellen Pfad arbeiten.
Diese Befehle werden aus Gründen der Konsistenz mit "
git commit -a
" und anderen Befehlen für den gesamten Baum in Git 2.0 ausgeführt . Da es keinen Mechanismus gibt, mit dem sich "git add -u
" so verhält, als ob "git add -u .
", ist es wichtig, dass diejenigen, die es gewohnt sind,git add -u
den Index "(ohne Pfadangabe)" nur für Pfade im aktuellen Unterverzeichnis zu aktualisieren, damit beginnen, ihre Finger zu trainieren, um explizit zu sagen "git add -u .
"wenn sie es ernst meinen, bevor Git 2.0 kommt.Eine Warnung wird ausgegeben, wenn diese Befehle ohne Pfadangabe ausgeführt werden und wenn Sie lokale Änderungen außerhalb des aktuellen Verzeichnisses haben , da sich das Verhalten in Git 2.0 in einer solchen Situation von der heutigen Version unterscheidet.
Von Charles' Anweisungen , nach meinem Vorschlag Verständnis Prüfung würde wie folgt aussehen :
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
Dieser Blog-Beitrag kann auch hilfreich sein, um zu verstehen, in welcher Situation diese Befehle angewendet werden können: Entfernen gelöschter Dateien aus Ihrem Git-Arbeitsverzeichnis .
Mit Git 2.0 ( 28.05.2014 ) haben sich die Dinge geändert :
-A
ist jetzt die Standardeinstellung--ignore-removal
.git add -u
und git add -A
in einem Unterverzeichnis ohne Pfade in der Befehlszeile wird der gesamte Baum bearbeitet.Für Git 2 lautet die Antwort also:
git add .
und git add -A .
fügen Sie neue / geänderte / gelöschte Dateien im aktuellen Verzeichnis hinzugit add --ignore-removal .
Fügt neue / geänderte Dateien zum aktuellen Verzeichnis hinzugit add -u .
Fügt geänderte / gelöschte Dateien zum aktuellen Verzeichnis hinzuEine schnellere Antwort:
git add -A
git add .
git add -u
git add :/
+git add -u :/
In Git 2.x :
Wenn Sie direkt an der sich das Arbeitsverzeichnis , dann git add -A
und git add .
Arbeit ohne Unterschied.
Wenn Sie sich in einem Unterverzeichnis des Arbeitsverzeichnisses befinden , git add -A
werden alle Dateien aus dem gesamten Arbeitsverzeichnis und git add .
Dateien aus Ihrem aktuellen Verzeichnis hinzugefügt .
Und das ist alles.
Ich hoffe, dass dies mehr Klarheit schafft.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Begrenzer können -u oder -A oder Null sein.
Pathspec kann ein Dateipfad oder ein Punkt sein. '.' um das aktuelle Verzeichnis anzugeben.
Wichtiges Hintergrundwissen darüber, wie Git 'hinzufügt':
-A
sei denn, dies ist ebenfalls angegeben. Punkt bezieht sich ausschließlich auf das aktuelle Verzeichnis - es werden die oben und unten gefundenen Pfade weggelassen.Angesichts dieses Wissens können wir nun die obigen Antworten anwenden.
Die Begrenzer sind wie folgt.
-u
= --update
= Teilmenge zu verfolgten Dateien => Hinzufügen = Nein; Ändern = Ja; Löschen = Ja. => wenn der Artikel verfolgt wird.-A
= --all
(keine solche -a
, was zu einem Syntaxfehler führt) = Obermenge aller nicht verfolgten / verfolgten Dateien, außer in Git vor 2.0, wobei, wenn die Punktdateispezifikation angegeben ist, nur dieser bestimmte Ordner berücksichtigt wird. => Wenn das Objekt erkannt wird, git add -A
wird es gefunden und hinzugefügt.Die Pfadangabe lautet wie folgt.
git add -A .
git add -u .
Zusammenfassend lautet meine Politik:
git status
..gitignore
Datei, damit normalerweise nur Dateien von Interesse nicht verfolgt und / oder nicht erkannt werden.Beide git add .
und git add -A
werden alle neuen, geänderten und gelöschten Dateien in den neueren Versionen von Git bereitstellen.
Der Unterschied besteht darin, dass git add -A
Dateien in "höheren, aktuellen und Unterverzeichnissen" bereitgestellt werden, die zu Ihrem funktionierenden Git-Repository gehören. Wenn Sie jedoch git add .
nur Dateien im aktuellen Verzeichnis und in den darauf folgenden Unterverzeichnissen ausführen ( nicht die Dateien, die außerhalb liegen, dh höhere Verzeichnisse).
Hier ist ein Beispiel:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
Wenn Ihr aktuelles Arbeitsverzeichnis lautet /my-repo
und Sie dies tun rm rootfile.txt
, cd subfolder
gefolgt von git add .
, wird die gelöschte Datei nicht bereitgestellt. Aber git add -A
wenn Sie dies tun, wird diese Änderung sicherlich durchgeführt, unabhängig davon, von wo aus Sie den Befehl ausführen.
Die -A
Option fügt Indexeinträge hinzu, ändert sie und entfernt sie entsprechend dem Arbeitsbaum.
In Git 2 ist die -A
Option jetzt die Standardeinstellung.
Wenn a .
hinzugefügt wird, wird der Umfang des Updates gemäß der Git-Dokumentation auf das Verzeichnis beschränkt, in dem Sie sich gerade befinden
Wenn
<pathspec>
bei Verwendung der Option -A kein angegeben wird, werden alle Dateien im gesamten Arbeitsbaum aktualisiert (alte Versionen von Git beschränken die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse).
Eine Sache, die ich hinzufügen würde, ist, dass wenn der Modus --interactive
oder -p
verwendet git add
wird, sich das Verhalten so verhält, als ob das -u
Flag update ( ) verwendet wurde, und keine neuen Dateien hinzugefügt werden.
git add *
?