Skip to main content

Commits rückgängig machen: reset vs. revert 🔄

Du hast also einen oder mehrere Commits gemachtgemacht, unddie merkstdu jetzt,loswerden dass etwas schief gelaufen istmöchtestseivielleicht eswar ein Bug,Fehler dabei, oder du hast dich in eine falsche DateiRichtung oder eine Änderung, die doch nicht so gut war.entwickelt. Git bietet dirdafür zwei grundlegend verschiedene Möglichkeiten, Commits rückgängig zu machen, aber dieStrategien: richtigeReset Wahlund Revert. Welche du wählen solltest, hängt entscheidend davon ab, ob du die Commits bereits gepusht hast oder nicht.nicht.


DieDas entscheidendeGrundprinzip Frage: Lokal oder schon gepusht?verstehen

Bevor duwir irgendetwasin tust,die musstDetails gehen, hier die Kernfrage, die du dir eineimmer zentralestellen solltest:

Haben andere Menschen (oder ich selbst auf einem anderen Gerät) bereits Zugriff auf diese Commits?

Diese Frage stellen:bestimmt, welchen Weg du gehen solltest:

flowchart TD
    START[A["Commit rueckgaengig machen?"] --> Q1{B{"Bereits auf GitHub gepusht?"}
    Q1B -->|Nein,Nein| nur lokal| RESET[C["git reset verwenden\reset\nHistorie wird umgeschrieben"umschreiben"]
    Q1B -->|Ja,Ja| bereits gepusht| REVERT[D["git revertrevert\nNeuen verwenden\nNeuerCommit Gegen-Commit"erstellen"]
    
    RESETC --> R1[E["Sicher:Commits Du bistverschwinden\naus der Einzige,\nder diese Commits kennt"Historie"]
    REVERTD --> R2[F["Sicher:Alter AndereCommit koennen\ndiebleibt,\nwird Aenderungdurch nachvollziehen"neuen rueckgaengig gemacht"]
    
    style C fill:#90EE90,color:#000000
    style D fill:#87CEEB,color:#000000

Diese Unterscheidung ist fundamental wichtig, weil:

    Lokale Commits existieren nur auf deinem Computer – du kannst die Historie nach Belieben ändern, ohne jemanden zu stören. Gepushte Commits sind öffentlich – andere könnten sie bereits haben, und wenn du die Historie änderst, erzeugst du Chaos.

    Methode 1: git resetdie Historie umschreiben ✂️

    Mit git reset verschiebstentfernst du denCommits aus deiner lokalen Historie, als hätten sie nie existiert. Das ist sauber und elegant – aber nur, solange niemand sonst diese Commits bereits hat.

    Die drei Varianten von Reset

    Git reset gibt es in dreiZeiger" deines Branches auf einen früheren Commit. Die Commits,Härtegraden", die danach kamen, verschwinden aus der Historie (oder werden zumindest nicht mehr referenziert). Es gibt drei Varianten, die sich darin unterscheiden,bestimmen, was mit deinen DateiänderungenÄnderungen passiert:

    Die

    drei Reset-Modi
    Modus Befehl Was passiert mit den Änderungen?

    Soft

    git reset --soft HEAD~1 der sanfte Reset

    Die Commits werden entfernt, aber alle Änderungen bleiben in der Staging Area erhalten. bereitDu fürkannst einensie neuendirekt Commit

    neu committen (z. MixedB. mit einer besseren Nachricht oder anders aufgeteilt).
    git reset --mixedsoft HEAD~1    # Letzten Commit entfernen, Änderungen bleiben staged
    

    --mixed (Standard) – der mittlere Weg

    Die Commits werden entfernt, die Änderungen landen im Working Directory (also nicht mehr staged, aber noch vorhanden). Du kannst entscheiden, was du kannstdavon siebehalten bearbeitenmöchtest.

    (Standard)
    git 
    reset HEAD~1 # Letzten Commit entfernen, Änderungen im Working Directory git reset --mixed HEAD~1 # Identisch zur Zeile darüber

    Hard--hard

    – der radikale Reset ⚠️

    Die Commits werden entfernt und alle Änderungen werden unwiderruflich gelöscht. Hier ist Vorsicht geboten!

    git reset --hard HEAD~1
    # Letzten Commit UND alle Änderungen werden komplett gelöschtlöschen unwiederbringlich ⚠️

    Was

    bedeutet HEAD~1?

    💡

    HEAD zeigt auf deinen aktuellen Commit HEAD~1 bedeutet „ein Commit vor demHEAD" aktuellen". Für zwei Commits zurück: HEAD~2, für drei: HEAD~3, usw.würde
    drei

    WannCommits welchen Modus verwenden?

      Soft Reset: Du möchtest den letzten Commit „aufbrechen", um ihn anders zu strukturieren oder die Commit-Nachricht zu ändern. Die Änderungen selbst sind in Ordnung.

      zurückgehen

      Mixed Reset: Du möchtestkannst denauch Commiteinen rückgängigkonkreten machenCommit-Hash undangeben: diegit Dateienreset nochmal--soft überarbeiten, bevor du sie erneut stagst und commitest.

      Hard Reset: Du möchtest den Commit und alle zugehörigen Änderungen komplett loswerden. Achtung: Das ist nicht rückgängig zu machen!

      abc1234

      Reset in PhpStorm durchführen

      1. Öffne das Git-Log über(unten Gitim → Show Git Log oder den Git-Tab am unteren Rand.

        Git-Tab)
      2. Finde den Commit,Commit, aufzu dendem du zurücksetzenzurückkehren möchtest (also den letzten guten„guten" Commit, nicht den, den du entfernen willst.

        Commit)
      3. Rechtsklick auf diesen Commit

      und wähleWähle Reset Current Branch to Here…Here...

      Es erscheint einIm Dialog mitwählst dendu dreizwischen Optionen:

      Soft,
        Soft:Mixed Behältoder alle Änderungen in der Staging Area Mixed:Hard Behält alle Änderungen im Working Directory (nicht gestagt) Hard: Verwirft alle Änderungen unwiderruflich

        Wähle den passenden Modus und bestätige.

        Beispiel: Den letzten Commit rückgängig machen

        Du💡 hastTipp: geradeIn einenPhpStorm Commitsiehst gemacht,du derdirekt eineneine Fehler enthält, aber noch nicht gepusht:

        # Im Terminal (alternativErklärung zu PhpStorm):jeder gitOption, resetwas --mixedsehr HEAD~1hilfreich 
        ist.

        Jetzt ist der Commit weg, aber deine Änderungen sind noch da. Du kannst den Fehler beheben und einen neuen, korrekten Commit erstellen.


        Methode 2: git revertEinensicher Gegen-Commitrückgängig erstellenmachen 🛡️

        Im Gegensatz zu reset ändertMit revert dieerstellst Historie nicht. Stattdessen erstellt esdu einen neuen Commit, der die Änderungen eines früheren Commits rückgängig macht. DerDie ursprünglicheursprünglichen (fehlerhafte)Commits Commit bleibtbleiben in der Historie sichtbarerhaltenaberes seinewird Auswirkungennur werdenein durch„Gegengift" denhinzugefügt.

        Revert-Commit

        Warum aufgehoben.Revert statt Reset bei gepushten Commits?

        Wenn du Commits gepusht hast und dann mit reset deine lokale Historie umschreibst, entsteht ein Problem: Dein lokales Repository und das Remote-Repository haben dann unterschiedliche Historien. Git wird sich weigern, deinen Push zu akzeptieren, und du müsstest einen Force Push machen – was die Historie für alle anderen zerstört, die vielleicht schon mit diesen Commits arbeiten.

        revert vermeidet dieses Problem elegant:

        flowchart LR
            A[subgraph "Nach Reset - GEFÄHRLICH"
                A1["Commit A\nGrundlage"A"] --> B[A2["Commit B\nFehlerhaft"B"]
            B --> C[A3["Commit C"]
                A1 -.->|"reset"| A4["Commit C\nWeitere Arbeit"nverschwunden"]
            Cend
            
            subgraph "Nach Revert - SICHER"
                B1["Commit A"] --> D[B2["Commit B"] --> B3["Commit C"] --> B4["Revert B\nMachtC\nmacht BC rueckgaengig"]
            style B fill:#ffcccc
            style D fill:#ccffccend
        

        Warum ist das für gepushte Commits wichtig?

        Wenn andere Teammitglieder (oder du selbst auf einem anderen Computer) den fehlerhaften Commit bereits heruntergeladen haben, würde ein reset zu Problemen führen:

          Du änderst die Historie auf GitHub (mit einem sogenannten „Force Push") Die anderen haben noch die alte Historie Beim nächsten Pull entstehen Konflikte und Verwirrung

          Ein revert hingegen fügt einfach einen neuen Commit hinzu – das funktioniert sauber für alle.

          Revert in PhpStorm durchführen

            Öffne das Git-Log und finde den Commit, den du rückgängig machen möchtest.

            Rechtsklick auf den fehlerhaften Commit und wähle Revert Commit (manchmal auch unter Git → Revert zu finden).

            PhpStorm erstellt automatisch einen neuen Commit, der alle Änderungen des gewählten Commits umkehrt.

            Du kannst die Commit-Nachricht anpassen – standardmäßig lautet sie etwas wie „Revert ‚Ursprüngliche Commit-Nachricht'".

            Nach dem Revert kannst du ganz normal pushen, und alle anderen erhalten die Korrektur sauber über pull.

            Revert im Terminal

            # Den letzten Commit reverten:rückgängig machen
            git revert HEAD
            
            # Einen bestimmten Commit revertenrückgängig machen (mitper Commit-Hash):
            git revert a1b2c3d4abc1234
            
            # Mehrere Commits auf einmal revert (ältester..neuester)
            git revert abc1234..def5678
            

            GitNach dem Revert öffnet daraufhinsich einennormalerweise ein Editor für die Commit-NachrichtNachricht. desGit Revert-Commits.schlägt automatisch etwas wie „Revert ‚Feature XY hinzugefügt'" vor, was du anpassen oder übernehmen kannst.


            Revert

            Mehrerein CommitsPhpStorm durchführen

              Öffne das Git-Log Finde den Commit, den du rückgängig machen

              Mit Reset (nur lokal!)

              Wenn du mehrere aufeinanderfolgende Commits zurücknehmen möchtest

              und diese noch nicht gepusht sind:
              # Die letzten 3 Commits rückgängig machen:
              git reset --mixed HEAD~3
              

              In PhpStorm wählst du einfach den Commit aus,

              Rechtsklick auf den duCommit zurücksetzenWähle möchtest – alle Commits danach werden entfernt.

              Mit Revert (auchCommit

              fürPhpStorm gepushteerstellt Commits)

              Hier musst du jeden Commit einzeln reverten, und zwar in umgekehrter Reihenfolge (neueste zuerst):

              # Mehrere Commits reverten (neueste zuerst):
              git revert HEAD
              git revert HEAD~1
              git revert HEAD~2
              
              # Oderautomatisch einen Bereichneuen revertenCommit, (erstelltder mehreredie Revert-Commits):Änderungen gitumkehrt
              revert HEAD~3..HEAD

              In PhpStorm führst du den Revert nacheinander für jeden Commit aus, beginnend mit dem neuesten.


              Übersicht:Wann Resetwelche vs.Methode? Revert– Die Entscheidungshilfe

              AspektSituation gitEmpfohlene resetMethode git revertBegründung
              WasCommit passiert?noch nicht gepusht, du möchtest neu committen Commitsreset werden aus der Historie entfernt--soft Neuer Commit macht Änderungen rückgängigbleiben staged, du kannst sie direkt verbessern
              HistorieCommit noch nicht gepusht, du möchtest alles überdenken Wirdreset umgeschrieben--mixed BleibtÄnderungen intakt,im wirdWorking erweitertDirectory, du wählst neu aus
              GepushteCommit Commits?noch nicht gepusht, Änderungen sollen weg ⚠️reset Nur mit Force Push – gefährlich!--hard Schnell Sicher,und normalersauber, Pushaber unwiderruflich
              Commit Teamarbeitbereits gepusht Verursachtrevert
              Sicher, keine Probleme beimit anderen Funktioniert sauber für alleRemote SichtbarkeitAlte Commits mitten in der Historie korrigieren Fehler wird unsichtbarrevert FehlerHistorie bleibt sichtbar (mit Korrektur)intakt Gemeinsames Projekt mit anderen AnwendungsfallImmer revert LokaleTeamkollegen Korrekturen,werden bevores jemanddir die Commits sieht Korrekturen an öffentlicher/gepushter Historiedanken

              DasDer gefährliche Terrain:Sonderfall: Force Push ⚠️

              EsFalls istdu technisch möglich, auchtrotzdem nach einem PushReset diepushen Historiemöchtest zu(weil änderndu z. mitB. einemallein sogenanntenam Projekt arbeitest und sicher bist, dass niemand sonst betroffen ist), kannst du einen Force Push: machen:

              # Nach einem lokalen Reset:
              git push --force
              # oder etwas sicherer:
              git push --force-with-lease
              

              In DasPhpStorm solltestfindest du aberdiese nurOption tun,im wenn:Push-Dialog unter Force Push.

                Du

                ⚠️ alleineWichtig: amForce RepositoryPush arbeitest

                überschreibt Dudie Remote-Historie unwiderruflich. Nutze das nur, wenn du absolut sicher bist, dass niemand anderes diemit diesen Commits bereitsarbeitet. hatIn DuTeam-Projekten weißt, was du tust

                ⚠️ Warnung: Einist Force Push kann die Arbeit anderer unwiederbringlich zerstören, wenn sie auf den gelöschtenMain-Branch Commitsoft aufgebautsogar haben. In den meisten Team-Situationen ist revert die bessere Wahl.verboten.


                Die

                PraktischeOption Entscheidungshilfe

                --force-with-lease

                Hierist eineetwas Zusammenfassung,sicherer: dieSie dirverweigert beiden Push, falls jemand anderes in der EntscheidungZwischenzeit hilft:gepusht hat.

                flowchart TD
                    START["Commit rueckgaengig machen"] --> Q1{"Schon gepusht?"}
                    
                    Q1 -->|Nein| Q2{"Was soll mit den\nAenderungen passieren?"}
                    Q2 -->|Behalten und bearbeiten| MIXED["reset --mixed"]
                    Q2 -->|Behalten und direkt neu committen| SOFT["reset --soft"]
                    Q2 -->|Komplett verwerfen| HARD["reset --hard"]
                    
                    Q1 -->|Ja| Q3{"Arbeitest du alleine\nam Repository?"}
                    Q3 -->|Ja, ganz sicher| Q4{"Soll der Fehler\nsichtbar bleiben?"}
                    Q3 -->|Nein oder unsicher| REVERT1["revert verwenden"]
                    
                    Q4 -->|Nein| FORCE["reset + force push\nmit Vorsicht!"]
                    Q4 -->|Ja oder egal| REVERT2["revert verwenden"]
                

                ZusammenfassungPraktisches Beispiel: Der typische „Oh nein"-Moment

                  Szenario: Du hast gerade einen Commit gemacht und gepusht, der versehentlich Debug-Code enthält.

                  1. NochPrüfen, nichtwas gepusht?passiert ist:

                    Schau Nutzeim Git-Log, welcher Commit das Problem verursacht hat (notiere dir den Hash, z. B. git reseta1b2c3d – du hast volle Kontrolle über deine lokale Historie und kannst sie nach Belieben ändern.).

                  2. BereitsRevert gepusht?durchführen:

                    → Nutze
                    git revert a1b2c3d
                    

                    Oder esin istPhpStorm: sicher,Rechtsklick transparentauf undden funktioniertCommit für alle,Revert die das Repository nutzen.Commit

                  3. Den Revert-Commit pushen:

                    git push
                    

                  Fertig! Die Debug-Änderungen sind rückgängig gemacht, und die Historie zeigt transparent, was passiert ist.


                  Zusammenfassung 📋

                    reset schreibt die Historie um – ideal für lokale Commits, die noch niemand gesehen hat revert erstellt einen neuen „Rückgängig-Commit" – sicher für bereits gepushte Commits Faustregel: Sobald ein Commit gepusht wurde, nutze revert Force Push istnur einim WerkzeugNotfall und nur bei Solo-Projekten PhpStorm bietet für Expertenbeide undMethoden Solo-Projektekomfortable Menüoptionen inim Teamumgebungen solltest du die Finger davon lassen. Git-Log

                    Das Wichtigste ist: Git verliert selten wirklich Daten. Selbst nach einem harten Reset kannst du mit git reflog oft noch auf die „verlorenen" Commits zugreifen – aber das ist ein fortgeschrittenes Thema für einen anderen Tag. 😊