Ich würde gerne verstehen, was Git tatsächlich speichert, wenn Dateien in den "Staging" -Zustand versetzt werden.
Betrachten Sie die folgende Reihenfolge:
Eine neue Datei wird hinzugefügt und an das lokale Repository übergeben:
%Vor%Ich mache Änderungen an der Datei:
%Vor%Ich bearbeite die Datei erneut, bevor ich sie begehe:
%Vor%Ein Git Status zeigt:
%Vor%Ich begehe dann die Datei:
%Vor%Wie kann git die neue, zweite Aktualisierung von file.txt durchführen, ohne dass es dazu aufgefordert wird? Die "status" -Ausgabe sieht so aus, als würde sie versuchen, die erste Revision zu überprüfen, aber die nicht geänderten Änderungen zurückhalten, ohne sie zu überprüfen.
Gibt es in diesem Fall eine implizite Stufe?
Stellen Sie sich Git als zwei Dinge vor - Commits (Snapshots von Dateien) und Labels (ua Zweige).
Git erstellt tatsächlich einen Commit wenn Sie git add
, nicht wenn Sie git commit
. Wenn Sie also git add
für die geänderte Datei ausgeführt haben, wurde ein Commit mit diesen Änderungen erstellt und diesem Commit die Bezeichnung "staging" zugewiesen.
Wenn Sie die Datei vor dem Ausführen von git commit
erneut geändert haben, hat sie nun den "gestaffelten Commit" (der noch nicht git commit
ausgeführt hat) und die neuen Änderungen an der Datei, die nicht hinzugefügt wurde noch verpflichtet. So kann git status
Ihnen beide zeigen.
Wenn Sie git commit
setzen, verschiebt es Ihr aktuelles Branch Label tatsächlich zu diesem Commit (und entfernt das "Staging" Label), so dass das Commit nicht länger als "Staging", sondern als "Master" (oder welcher Zweig) markiert wird Du bist gerade angemeldet.)
git commit <somefiles>
entspricht git add <somefiles>
gefolgt von git commit
. Wenn Sie nur git commit
ausführen, übernimmt git alle gestaffelten Änderungen, übernimmt jedoch keine Änderungen, die seit der letzten Bereitstellung der fraglichen Datei vorgenommen wurden.
Tags und Links git