Git Reset verstehen und seine Optionen

Der Befehl git reset erlaubt es, Commits rückgängig zu machen, Dateien aus dem Staging-Bereich zu entfernen oder Änderungen im Arbeitsverzeichnis zu verwerfen. Er funktioniert, indem er die drei zentralen Zustände in Git verändert: HEAD, Index und Working Directory. Obwohl sehr mächtig, kann er riskant sein – insbesondere mit der Option --hard. Im Folgenden erfährst du, wie die einzelnen Varianten arbeiten und wann du sie einsetzen solltest.

Überblick: Git Reset Optionen

Git bietet drei Hauptvarianten für den Reset-Befehl. Jede wirkt sich unterschiedlich auf HEAD, Staging-Bereich (Index) und Arbeitsverzeichnis aus. Die Tabelle fasst dies zusammen:

Flag HEAD Staging-Bereich Arbeitsverzeichnis Zusammenfassung
–soft Ja Nein Nein Änderungen bleiben im Staging
–mixed Ja Ja Nein Nimmt aus dem Staging, behält Dateiedits
–hard Ja Ja Ja Entfernt alle Änderungen

git reset –soft

Befehlssyntax und Erklärung

git reset --soft <commit>

  • git reset: Basisbefehl, der den Verlauf ändert.
  • –soft: Verschiebt HEAD, belässt Staging-Bereich und Arbeitsverzeichnis unverändert.
  • <commit>: Ziel-Commit (z. B. HEAD~1 oder ein Hash).

Wirkung des Flags

  • Bewegt HEAD auf das gewählte Commit.
  • Änderungen bleiben im Staging.
  • Arbeitsverzeichnis bleibt unberührt.

Anwendungsbeispiel

Ausgabe:
abc1234 Zweiter Commit
def5678 Initial Commit

Entfernt abc1234 aus der Historie, behält die Änderungen im Staging. Status prüfen:

Ausgabe:
Auf Branch main
Änderungen zum Commit vorgemerkt:
modified: file.txt

$ git commit -m "Angepasster Commit"

Erstellt einen neuen Commit mit denselben Änderungen, aber anderem Commit-Text.

git reset –mixed (Standard)

Befehlssyntax

git reset --mixed <commit>

  • –mixed: Setzt HEAD und Staging zurück, Arbeitsverzeichnis bleibt unverändert.

Anwendungsbeispiel

Ausgabe:
abc1234 Zweiter Commit
def5678 Initial Commit

$ git reset --mixed HEAD~1

Entfernt den letzten Commit, nimmt Änderungen aus dem Staging, behält sie aber im Arbeitsverzeichnis.

Ausgabe:
Auf Branch main
Nicht zum Commit vorgemerkte Änderungen:
modified: file.txt


$ git commit -m "Überarbeiteter Commit"

Damit kannst du die Änderungen neu einspielen und in separaten Commits strukturieren.

git reset –hard

Befehlssyntax

git reset --hard <commit>

  • Setzt HEAD, Staging und Arbeitsverzeichnis auf den Ziel-Commit zurück.
  • Vorsicht: Änderungen werden dauerhaft gelöscht, sofern sie nicht mit git reflog wiederhergestellt werden.

Wirkung des Flags

  • Bewegt HEAD auf den angegebenen Commit.
  • Leert den Staging-Bereich.
  • Setzt Dateien im Arbeitsverzeichnis auf den Zustand des Commits.

Anwendungsbeispiel

Ausgabe:
abc1234 Fehlerhafter Commit
def5678 Stabiler Stand

Verwirft den fehlerhaften Commit und stellt Dateien auf den stabilen Stand zurück. Prüfen mit:

Ausgabe:
Auf Branch main
nichts zu committen, Arbeitsverzeichnis sauber

Änderungen in Git zurücksetzen

Mit git reset kannst du dein Projekt auf einen bestimmten Commit zurücksetzen. Syntax:

git reset [--soft|--mixed|--hard] <commit>

  • --soft: Behält Änderungen im Staging.
  • --mixed: Entfernt Änderungen aus dem Staging, Arbeitsverzeichnis bleibt erhalten.
  • --hard: Entfernt alle Änderungen.

Auf einen bestimmten Commit zurücksetzen

Ausgabe:
a1b2c3d Tippfehler behoben
9f8e7d6 Login-Feature hinzugefügt
8e7f6a5 Initial Commit

Beispiele:

  • Soft Reset: git reset --soft a1b2c3d
  • Mixed Reset: git reset --mixed a1b2c3d
  • Hard Reset: git reset --hard a1b2c3d

Verwende git reflog, wenn du dich von einem versehentlichen Reset erholen musst.

Reset rückgängig machen in Git

Befehlssyntax

git reflog zeigt Bewegungen von HEAD inklusive Resets.

$ git reset --hard HEAD@{n}

HEAD@{n} bedeutet, wie viele Schritte zurück (z. B. HEAD@{1} = ein Schritt zurück).

Anwendungsbeispiel


Ausgabe:
abc1234 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit: Login-Feature hinzugefügt

$ git reset --hard HEAD@{1}

Damit stellst du den vorherigen Zustand wieder her. git reflog funktioniert mit allen Reset-Arten, ist aber besonders wichtig bei --hard, da dort Änderungen in Arbeitsverzeichnis und Index entfernt werden.

Fazit

Mit git reset kannst du Commits zurücknehmen, Änderungen aus dem Staging entfernen oder sämtliche Anpassungen verwerfen. Wähle die Variante passend zum Anwendungsfall:

  • –soft: Commits zurücknehmen, Änderungen bleiben im Staging.
  • –mixed: Änderungen aus dem Staging nehmen, Arbeitsverzeichnis bleibt erhalten.
  • –hard: Alles vollständig verwerfen und zurücksetzen – nur nutzen, wenn du sicher bist.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: