Wenn Sie eine Datei in Ihrem Repository ändern, wird die Änderung zunächst nicht übertragen. Um sie zu übertragen, müssen Sie sie in den Index aufnehmen, indem Sie git add
. Wenn Sie eine Übertragung vornehmen, werden die Änderungen übertragen, die dem Index hinzugefügt wurden.
git reset
ändert zumindest, wo der aktuelle Zweig ( HEAD
) zeigt. Der Unterschied zwischen --mixed
y --soft
ist, ob Ihr Index ebenfalls geändert wird oder nicht. Wenn wir also im Zweig master
mit dieser Reihe von Übertragungen:
- A - B - C (master)
HEAD
zeigt auf C
und der Index entspricht C
.
Wenn wir die git reset --soft B
, master
(und damit HEAD
) zeigt nun auf B
aber der Index enthält noch die Änderungen von C
; git status
werden sie als inszeniert dargestellt. Wenn wir also Folgendes ausführen git commit
erhalten wir eine neue Übertragung mit denselben Änderungen wie C
.
Okay, also noch einmal von vorne:
- A - B - C (master)
Jetzt machen wir git reset --mixed B
. (Anmerkung: --mixed
ist die Standardoption). Noch einmal, master
y HEAD
auf B zeigen, aber dieses Mal wird der Index auch geändert, um mit B
. Wenn wir die git commit
zu diesem Zeitpunkt wird nichts passieren, da der Index mit HEAD
. Wir haben die Änderungen immer noch im Arbeitsverzeichnis, aber da sie nicht im Index sind, git status
zeigt sie als nicht inszeniert. Um sie zu übertragen, müssen Sie git add
und dann wie gewohnt übertragen.
Und schließlich, --hard
ist dasselbe wie --mixed
(es verändert Ihre HEAD
und Index), mit der Ausnahme, dass --hard
ändert auch Ihr Arbeitsverzeichnis. Wenn wir uns bei C
und laufen git reset --hard B
und dann die Änderungen in C
sowie alle nicht übertragenen Änderungen werden entfernt, und die Dateien in Ihrer Arbeitskopie werden mit der Übertragung B
. Da Sie auf diese Weise Änderungen dauerhaft verlieren können, sollten Sie immer git status
bevor Sie einen Hard-Reset durchführen, um sicherzustellen, dass Ihr Arbeitsverzeichnis sauber ist oder dass Sie damit einverstanden sind, Ihre nicht übertragenen Änderungen zu verlieren.
Und schließlich eine Visualisierung: ![enter image description here]()