Der Befehl git add [--all|-A]
scheint identisch zu sein mit git add .
. Ist dies richtig? Wenn nicht, wie unterscheiden sie sich?
Was ist der Unterschied zwischen git add *
?
Der Befehl git add [--all|-A]
scheint identisch zu sein mit git add .
. Ist dies richtig? Wenn nicht, wie unterscheiden sie sich?
Diese Antwort gilt nur für Git Version 1.x . Für Git Version 2.x, siehe andere Antworten.
Zusammenfassung:
git add -A
Stufen alle Änderungen
git add .
stuft neue Dateien und Änderungen ein, ohne Löschungen (für das aktuelle Verzeichnis und seine Unterverzeichnisse).
git add -u
Änderungen und Streichungen von Etappen, ohne neue Dateien
Einzelheiten:
git add -A
ist gleichbedeutend mit git add .; git add -u
.
Der wichtige Punkt über git add .
ist, dass es sich den Arbeitsbaum ansieht und all diese Pfade zu den bereitgestellten Änderungen hinzufügt, wenn sie entweder geändert oder neu sind und nicht ignoriert werden, es führt keine "rm"-Aktionen durch.
git add -u
schaut sich alle bereits verfolgten Dateien und führt die Änderungen an diesen Dateien durch, wenn sie sich unterscheiden 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 diese beiden Aufgaben.
Sie können die Unterschiede wie folgt testen (beachten Sie, dass bei Git Version 2.x die Ausgabe 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
Ich habe das ausprobiert, und es scheint Dateien hinzugefügt zu haben, die in meinem .gitignore waren. Gibt es eine Möglichkeit, das Gleiche zu tun, aber .gitignore zu ehren?
Schade git add -A -p
funktioniert nicht so, wie man es erwarten würde (fragt interaktiv nach nicht verfolgten Dateien)
Befehl
Neue Dateien
Geänderte Dateien
Gelöschte Dateien
Beschreibung
git add -A
Alle (neuen, geänderten, gelöschten) Dateien auf die Bühne bringen
git add .
Neue und geänderte Dateien nur im aktuellen Ordner anzeigen
git add -u
Nur geänderte und gelöschte Dateien einstellen
Befehl
Neue Dateien
Geänderte Dateien
Gelöschte Dateien
Beschreibung
git add -A
Alle (neuen, geänderten, gelöschten) Dateien auf die Bühne bringen
git add .
Alle (neuen, geänderten, gelöschten) Dateien im aktuellen Ordner verschieben
git add --ignore-removal .
Nur neue und geänderte Dateien einstellen
git add -u
Nur geänderte und gelöschte Dateien einstellen
git add -A
ist gleichbedeutend mit git add --all
git add -u
ist gleichbedeutend mit git add --update
Danke für die Tabelle. Gibt es eine Möglichkeit, nur die Dateien hinzuzufügen, die geändert wurden. Keine neuen Dateien oder gelöschte Dateien
@Gokul: Laut diese Stelle können Sie verwenden git diff-files -z --diff-filter=M --name-only | xargs -0 git add
um nur die geänderten Dateien hinzuzufügen, nicht aber die neuen Dateien oder die Löschungen.
Dies ist nicht ganz richtig, denn git add .
fügt nur neue Dateien hinzu, die sich im aktuellen Pfad befinden. Das heißt, wenn Sie ein neues Verzeichnis haben ../foo
, git add -A
wird es inszenieren, git add .
wird nicht.
Mit Git 2.0, git add -A
ist Standard: git add .
ist gleich git add -A .
.
git add <path>
ist gleichbedeutend mit "git add -A <path>
" jetzt, so dass "git add dir/
"bemerkt Pfade, die Sie aus dem Verzeichnis entfernt haben, und protokolliert die Entfernung.
In älteren Versionen von Git, "git add <path>
" ignorierte Umzüge.Sie können sagen "
git add --ignore-removal <path>
", um nur hinzugefügte oder geänderte Pfade in<path>
wenn Sie es wirklich wollen.
git add -A
ist wie git add :/
( alles aus dem obersten Git-Repo-Ordner hinzufügen ).
Beachten Sie, dass git 2.7 (Nov. 2015) Ihnen erlaubt, einen Ordner namens " :
"!
Siehe Commit 29abb33 (25. Oktober 2015) von Junio C. Hamano ( gitster
) .
Beachten Sie, dass Start von Git 2.0 (Q1 oder Q2 2014) wenn man über git add .
(aktueller Pfad innerhalb des Arbeitsbaums), müssen Sie ' .
' in der anderen git add
auch Befehle.
Das bedeutet:
"
git add -A .
" ist gleichbedeutend mit "git add .; git add -u .
"
(Beachten Sie den Zusatz ' .
' für git add -A
y git add -u
)
Denn git add -A
o git add -u
würde (nur ab Git 2.0) auf dem gesamter Arbeitsbaum und zwar nicht nur auf dem aktuellen Pfad.
Diese Befehle werden in Git 2.0 auf den gesamten Baum wirken, um die Konsistenz mit "
git commit -a
" und andere Befehle . Denn es wird keinen Mechanismus geben, um die "git add -u
" sich so verhalten, als ob "git add -u .
", ist es wichtig für diejenigen, die an "git add -u
" (ohne pathspec), die den Index nur für Pfade im aktuellen Unterverzeichnis aktualisieren, um ihre Finger darauf zu trainieren, explizit zu sagen "git add -u .
", wenn sie es 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 vorgenommen haben weil das Verhalten in Git 2.0 anders sein wird in einer solchen Situation von der heutigen Version unterscheidet.
@NickVolynkin Das ist großartig! Es freut mich, dass die internationale Gemeinschaft von SO wie beabsichtigt funktioniert. Als Referenz: ru.stackoverflow.com/a/431840
@VonC, Schön, die Git-Leute hatten tatsächlich die Frechheit zu sagen, dass ihr Update "die Dinge konsistenter machen wird". Was sie getan haben, ist, noch mehr Verwirrung und Unstimmigkeiten zu schaffen. Es gibt 26 Alphabete und sie hatte um ein bereits verwendetes Kennzeichen wiederzuverwenden.
Unter Git 2.x :
Wenn Sie sich direkt an der Arbeitsverzeichnis entonces git add -A
y git add .
ohne den Unterschied zu arbeiten.
Wenn Sie sich in einem beliebigen Unterverzeichnis des Arbeitsverzeichnis , git add -A
fügt alle Dateien aus dem gesamten Arbeitsverzeichnis そして git add .
fügt Dateien aus Ihrem aktuelles Verzeichnis .
Und das ist alles.
Die Dinge haben sich geändert mit Git 2.0 ( 2014-05-28 ) :
-A
ist jetzt der Standard--ignore-removal
.git add -u
y git add -A
in einem Unterverzeichnis ohne Pfade in der Befehlszeile wirken auf den gesamten Baum.Für Git 2 lautet die Antwort also:
git add .
y git add -A .
neue/geänderte/gelöschte Dateien im aktuellen Verzeichnis hinzufügengit add --ignore-removal .
fügt neue/geänderte Dateien in das aktuelle Verzeichnis eingit add -u .
fügt geänderte/gelöschte Dateien im aktuellen Verzeichnis hinzu
Ich glaube nicht, dass dies richtig ist. Bei Verwendung von git v2.10.Windows.2 liefert "git add" die Meldung "Nichts angegeben, nichts hinzugefügt". 'git add -A' fügt alle geänderten Dateien hinzu. Das deutet darauf hin, dass '-A' nicht der Standard ist.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.