Änderungen rückgängig machen · Übung
Ich habe etwas versehentlich bereitgestellt
Du hast git add etwas zu großzügig verwendet. Jetzt ist etwas bereitgestellt, das du nicht im nächsten Commit haben möchtest. Noch ist nichts committet. Du möchtest es aus der Staging-Area nehmen, die Datei aber nicht verlieren.
Das sind zwei verschiedene Wünsche, und Git behandelt sie als zwei verschiedene Vorgänge. In dieser Lektion geht es nur um den ersten.
Nachsehen, was bereitgestellt ist
git status
scratch.tmp ist eine private Notizdatei mit zwei Erinnerungen: Gezeiten prüfen und in der Herberge anrufen. Sie ist bereitgestellt, also für den nächsten Commit vorgesehen. So etwas gehört nicht in den Verlauf eines Projekts.
Die Datei wieder aus der Staging-Area nehmen
git restore --staged scratch.tmp
git status
Das ist derselbe Befehl git restore aus der vorherigen Lektion, ergänzt um eine Option. --staged sagt ihm, dass er die Staging-Area statt des Arbeitsbaums verändern soll. Bei einer verfolgten Datei stellt er die bereitgestellte Version aus dem neuesten Commit wieder her. scratch.tmp wurde noch nie committet. Hier bedeutet das deshalb, die Datei aus der für den nächsten Commit vorgesehenen Momentaufnahme zu entfernen.
Danach zeigt git status die Datei scratch.tmp nicht mehr als bereitgestellt, sondern als nicht verfolgt an. Sie liegt noch immer unverändert auf dem Datenträger, mit deinen beiden Erinnerungen darin. Sie steht nur nicht mehr auf der Liste.
Was dabei zerstört wird und was nicht
Fast nichts. Deshalb lohnt es sich, diesen Befehl früh zu lernen. git restore --staged macht eine Entscheidung rückgängig, keine Bearbeitung. Deine Datei behält ihren Inhalt. Nichts wird committet, und kein Verlauf wird verschoben.
Der Unterschied zur vorherigen Lektion ist der entscheidende Punkt. Halte ihn fest:
git restore <file>verändert den Arbeitsbaum. Es verwirft deine Bearbeitung.git restore --staged <file>verändert die Staging-Area. Es behält deine Datei und hebt nur das Bereitstellen auf.
Die Option macht den Unterschied zwischen dem sicheren und dem endgültigen Vorgang. Lies den Befehl, den du gleich ausführen willst.
Die Datei dauerhaft heraushalten
Das Zurücknehmen aus der Staging-Area löst das heutige Problem. Wenn du eine Notizdatei immer wieder herausnehmen musst, sollte Git sie wohl dauerhaft ignorieren. Dafür ist eine .gitignore-Datei da. Darum geht es in Kapitel 9. Das ist eine bessere Lösung, als jedes Mal daran denken zu müssen.
notes.md enthält Änderungen, die du behalten möchtest, aber du hast sie zu früh bereitgestellt. Welcher Befehl nimmt die Datei von der Liste für den nächsten Commit, ohne deine Bearbeitungen anzufassen?
Als Nächstes: Der Commit ist schon erstellt und stimmt nicht.