Es gibt drei Stellen, an denen sich beispielsweise eine Datei befinden kann - den Baum, den Index und die Arbeitskopie. Wenn Sie einem Ordner nur eine Datei hinzufügen, fügen Sie sie der Arbeitskopie hinzu.
Wenn Sie so etwas tun, git add file
fügen Sie es dem Index hinzu. Und wenn Sie es festschreiben, fügen Sie es auch dem Baum hinzu.
Es wird Ihnen wahrscheinlich helfen, die drei häufigsten Flags beim Zurücksetzen von Git zu kennen:
Git Reset [- <mode>
] [ <commit>
]
Dieses Formular setzt den aktuellen Verzweigungskopf zurück <commit>
und aktualisiert möglicherweise den Index (Zurücksetzen auf den Baum von <commit>
) und den Arbeitsbaum, je nachdem <mode>
, welcher der folgenden Werte sein muss:
--soft
Berührt weder die Indexdatei noch den Arbeitsbaum (setzt jedoch den Kopf auf zurück <commit>
, genau wie in allen Modi). Dadurch bleiben alle geänderten Dateien "Änderungen müssen festgeschrieben werden", wie der Git-Status es ausdrücken würde.
--gemischt
Setzt den Index, aber nicht den Arbeitsbaum zurück (dh die geänderten Dateien werden beibehalten, aber nicht für das Festschreiben markiert) und meldet, was nicht aktualisiert wurde. Dies ist die Standardaktion.
--schwer
Setzt den Index und den Arbeitsbaum zurück. Alle Änderungen an nachverfolgten Dateien im Arbeitsbaum seitdem <commit>
werden verworfen.
Wenn Sie nun so etwas tun git reset HEAD
- was Sie tatsächlich tun, ist, git reset HEAD --mixed
dass der Index auf den Zustand "zurückgesetzt" wird, der vor dem Hinzufügen von Dateien / Hinzufügen von Änderungen zum Index (über git add
) war. In diesem Fall die Arbeitskopie und die Index (oder Staging) waren synchron, aber Sie haben HEAD und Index nach dem Zurücksetzen synchronisiert.
git rm
Auf der anderen Seite wird eine Datei aus dem Arbeitsverzeichnis und dem Index entfernt. Wenn Sie ein Commit ausführen, wird die Datei auch aus dem Baum entfernt. git rm --cached
Entfernt die Datei jedoch nur aus dem Index und behält sie in Ihrer Arbeitskopie. Dies ist das genaue Gegenteil von git add file
In diesem Fall haben Sie den Index so gestaltet, dass er sich vom HEAD und vom funktionierenden unterscheidet. Der HEAD verfügt über die zuvor festgeschriebene Version der Datei. Die Arbeitskopie hatte die letzte Änderung, falls vorhanden, oder den Inhalt von HEAD von die Datei und Sie haben die Datei aus dem Index entfernt. Ein Commit synchronisiert jetzt den Index und den Baum und die Datei wird entfernt.
git rm --cached
demgit diff
Befehl kein Diff angezeigt wird, sonderngit diff --cached
der Diff, als ob er noch zwischengespeichert wäre. Dasgit status
zeigt jedoch die Datei alsUntracked
. Scheint irgendwie inkonsistent.