Pulsars

Git Undo — Git-Fehler sofort beheben

What happened?

Git ist ein verteiltes Versionskontrollsystem, bei dem die meisten Operationen reversibel sind — aber den richtigen Umkehrbefehl zu finden, erfordert ein Verständnis von Gits internem Modell aus Arbeitsverzeichnis, Staging-Bereich (Index) und Commit-Historie. Häufige Fehler wie der Commit auf dem falschen Branch, das Pushen sensibler Daten oder ein fehlerhafter Merge erfordern jeweils unterschiedliche Kombinationen von git reset, git revert, git rebase und git filter-branch.

Welche Git-Fehler passieren am häufigsten?

Die häufigsten Git-Notfälle lassen sich in einige Kategorien einteilen: Commit auf dem falschen Branch, einen kürzlichen Commit rückgängig machen, versehentlich sensible Daten gepusht und einen Merge rückgängig machen. Jedes Szenario hat eine andere Lösung, je nachdem, ob Sie bereits auf den Remote-Server gepusht haben. Der obige Entscheidungsbaum führt Sie durch diese Verzweigungspfade, um die sicherste Lösung zu finden. Bei nicht gepushten Commits ist git reset meist die beste Wahl, bei bereits gepushten Änderungen git revert.

Was ist der Unterschied zwischen git reset und git revert?

git reset schreibt die Historie um, indem der Branch-Zeiger zurückbewegt wird. Es gibt drei Varianten: --soft (behält Änderungen im Staging-Bereich), --mixed (behält Änderungen als nicht gestaged, Standard) und --hard (verwirft alle Änderungen). Reset ist sicher für lokale, nicht gepushte Commits — aber gefährlich für gemeinsame Historie, da es Mitarbeiter zwingt, divergierte Branches abzugleichen.

git revert erstellt einen neuen Commit, der die Änderungen eines bestimmten Commits rückgängig macht. Es bewahrt die vollständige Historie und ist damit sicher für gepushte, gemeinsame Branches. Faustregel: Verwenden Sie reset für nicht gepushte Fehler, revert für gepushte. Arbeiten Sie mit regulären Ausdrücken in Ihren Git-Hooks? Probieren Sie unseren Regex Tester.

Häufig gestellte Fragen

Was ist der Unterschied zwischen git reset und git revert?

+

git reset verschiebt den Branch-Zeiger rückwärts und löscht Commits effektiv aus der Historie. Es ist sicher für lokale, nicht gepushte Arbeit. git revert erstellt einen neuen Commit, der die Änderungen eines vorherigen Commits rückgängig macht und die vollständige Historie bewahrt. Verwenden Sie revert, wenn Sie bereits auf einen gemeinsamen Branch gepusht haben — es ist sicher für kollaborative Workflows, da es die Historie nicht umschreibt.

Wann sollte ich --force-with-lease statt --force verwenden?

+

Bevorzugen Sie immer --force-with-lease gegenüber --force, wenn Sie einen Force-Push durchführen müssen. --force-with-lease prüft, ob der Remote-Branch seit Ihrem letzten Fetch von jemand anderem aktualisiert wurde. Falls ja, wird der Push abgelehnt — so wird verhindert, dass Sie versehentlich die Arbeit eines Teammitglieds überschreiben. --force überschreibt alles auf dem Remote blind.

Kann ich einen Commit nach git reset --hard wiederherstellen?

+

Ja, normalerweise schon. Git führt ein lokales Reflog (git reflog), das alle HEAD-Bewegungen der letzten 90 Tage aufzeichnet. Finden Sie den Commit-Hash in der Reflog-Ausgabe und verwenden Sie git checkout -b recovery-branch <hash>, um ihn wiederherzustellen. Wenn Sie jedoch auch git gc (Garbage Collection) ausgeführt haben, können nicht referenzierte Commits dauerhaft gelöscht sein.

Ich habe ein Passwort in Git committet. Ist es kompromittiert?

+

Wenn Sie den Commit gepusht haben, gehen Sie davon aus, dass die Zugangsdaten kompromittiert sind — auch wenn Sie innerhalb von Sekunden einen Fix force-pushen. Automatisierte Scanner (einschließlich GitHubs Secret-Scanning) haben es möglicherweise bereits erkannt, und jeder, der Ihr Repository gepullt hat, hat eine Kopie. Rotieren Sie die Zugangsdaten sofort: API-Schlüssel widerrufen, Passwörter ändern, neue Tokens generieren. Verwenden Sie dann git-filter-repo, um es aus der Historie zu entfernen.

Wie mache ich einen Git-Merge rückgängig, ohne den Branch zu verlieren?

+

Wenn der Merge noch nicht gepusht wurde, verwenden Sie git reset --hard ORIG_HEAD, um zum Zustand vor dem Merge zurückzukehren. Wenn er bereits gepusht wurde, verwenden Sie git revert -m 1 <merge-commit-hash>, um einen neuen Commit zu erstellen, der den Merge rückgängig macht und die Historie bewahrt. Hinweis: Wenn Sie einen Merge reverten und den gleichen Branch später erneut mergen möchten, müssen Sie zuerst den Revert reverten.

Related Tools