git reset

1 minute read

Das Thema Reset in einem aktuellen Kurs Git ist spannend. Daher fasse ich das recherchierte in eigenen Worte zusammen.

Überblick

“Revert” (Commits in einem öffentlichen Branch rückgängig machen), “Checkout” und “Release” haben eine vergleichbare Funktion.

Kurz und knappp: “Checkout” ändern den “Head”, Reset verschiebt den Zeiger des Head auf das vorhergehende Commit Objekt. Die Begriffe belasse ich weitgehend im Orginal:

Tree Role
_______________________
HEAD……………………Last commit snapshot, next parent
Staging Area…………..Proposed next commit snapshot
Working Directory…….Working Tree

Gross / Kleinschreibung sollte immer beachtet werden.

Reichweite

Über Parameter wird die Reichweite (“Working Directory” / “Staging Area” / “HEAD”) des Reset Befehls definiert.

“git reset”

“Reset” kann nur auf nicht geteilte Dateien angewendet werden. Ohne Parameter werden die Dateien bzw. deren BLOB in der Staging Area gelöscht. Die Dateien werden nicht im “Working Directory” gelöscht.

Mit den Parametern –soft, –mixed und –hard können die Änderungen in der Staging Area und am Working Directory gesteuert werden. Auch die Anzahl an Rückschritten kann gesteuert werden.

Angenommen ich starte einen neuen Branch, setzte dort 6 Commits ab, realisiere dann das alles nach Commit 4 weg muss. Das steuere ich über den Zusatz “~2”.
Beispiel:

git reset --soft~2

“Reset” kann auch gezielt auf eine Datei angewendet werden. Nachfolgend ein Beispiel wie man die Datei “readme.txt” aus dem Head entfernt.

git reset HEAD readme.txt

Die Syntax ist für Checkout identisch. Hier die Datei “readme.txt” mit dem vorletzten Commit Objekt abgeglichen.

Git Checkout HEAD readme.txt~1

“git reset –soft HEAD”

Der Zeiger im HEAD (aktueller Branch) wird um einen Punkt zurück gesetzt. Das kann ergänzend mit “~6” auch um 6 Commit Objekte zurück gesetzt werden. Keine Auswirkung auf “Staging Area” und “Working Directory”.

“git reset –mixed HEAD”

Zusätzlich zum HEAD werden auch die Objekte in der Staging Area gelöscht. Die Dateien im Working Directory werden nicht verändert.

“git reset –hard HEAD”

Hier wird auch der Arbeitsbereich zurück gesetzt. D.h. alle drei Bereiche werden neu justiert. D.h. unter Umständen werden Dateien gelöscht. Jede Datei die nicht commitet war, kann über Git nicht wieder zurück geholt werden.

Quellen

  1. Git Reference: git-reset
  2. git-scm.com: 7.7 Git Tools - Reset entzaubert
  3. Git-Tipps: Reset, Checkout und Revert für Fortgeschrittene (Teil 1)

Meta

Erstellt: 16. Juni 2019
Modifiziert: 16. Juni 2019

Tags:

Categories:

Updated: