Antworten:
Diese Antwort gilt nur für Git - Version 1.x . Für Git Version 2.x siehe andere Antworten.
Zusammenfassung:
git add -Ainszeniert alle Änderungen
git add .Stellt neue Dateien und Änderungen ohne Löschungen bereit
git add -uStellt Änderungen und Löschungen ohne neue Dateien bereit
Detail:
git add -Aist ä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 -pfunktioniert nicht wie erwartet (fragen Sie interaktiv nach nicht verfolgten Dateien)
git add -A :/odergit add -A .
git add -uwurde 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 -uoder 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 -uin zwei separate Befehle aufgeteilt wird add -u1und add-u2wobei 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 --allgit add -u ist äquivalent zu git add --updateWeiterführende Literatur:
git diff-files -z --diff-filter=M --name-only | xargs -0 git addnur 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 -Awird es inszeniert, git add .nicht.
git add .ist äquivalent zu git add -A ., was äquivalent istgit add "*"
Bei Git 2.0 git add -Aist 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 -Aist 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 addBefehlen verwenden müssen.
Das bedeutet:
"
git add -A ." entspricht "git add .; git add -u ."
(Beachten Sie das zusätzliche ' .' für git add -Aund git add -u)
Weil git add -Aoder git add -uwü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 -uden 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 -uund git add -Ain 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 -Aund git add .Arbeit ohne Unterschied.
Wenn Sie sich in einem Unterverzeichnis des Arbeitsverzeichnisses befinden , git add -Awerden 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':
-Asei 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 -Awird es gefunden und hinzugefügt.Die Pfadangabe lautet wie folgt.
git add -A .
git add -u .
Zusammenfassend lautet meine Politik:
git status..gitignoreDatei, damit normalerweise nur Dateien von Interesse nicht verfolgt und / oder nicht erkannt werden.Beide git add .und git add -Awerden alle neuen, geänderten und gelöschten Dateien in den neueren Versionen von Git bereitstellen.
Der Unterschied besteht darin, dass git add -ADateien 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-repound Sie dies tun rm rootfile.txt, cd subfoldergefolgt von git add ., wird die gelöschte Datei nicht bereitgestellt. Aber git add -Awenn Sie dies tun, wird diese Änderung sicherlich durchgeführt, unabhängig davon, von wo aus Sie den Befehl ausführen.
Die -AOption fügt Indexeinträge hinzu, ändert sie und entfernt sie entsprechend dem Arbeitsbaum.
In Git 2 ist die -AOption 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 --interactiveoder -pverwendet git addwird, sich das Verhalten so verhält, als ob das -uFlag update ( ) verwendet wurde, und keine neuen Dateien hinzugefügt werden.
git add *?