Lokale Übertragungen in Git wegwerfen

Aufgrund einer schlechten Rosinenpickerei ist mein lokales Git-Repository derzeit fünf Commits vor dem Original und in keinem guten Zustand. Ich möchte alle diese Commits loswerden und neu beginnen.

Natürlich würde das Löschen meines Arbeitsverzeichnisses und das erneute Klonen ausreichen, aber alles erneut von GitHub herunterzuladen, scheint mir übertrieben und keine gute Verwendung meiner Zeit zu sein.

Vielleicht ist git revert das, was ich brauche, aber ich möchte nicht 10 Commits vor dem Ursprung landen (oder sogar sechs), selbst wenn es den Code selbst wieder in den richtigen Zustand bringt. Ich möchte einfach so tun, als wäre die letzte halbe Stunde nie passiert.

Gibt es einen einfachen Befehl, mit dem dies möglich ist? Es scheint ein offensichtlicher Anwendungsfall zu sein, aber ich kann keine Beispiele dafür finden.


Beachten Sie, dass sich diese Frage speziell auf commits bezieht, nicht auf:

  • nicht verfolgte Dateien
  • nicht übertragene Änderungen
  • abgestufte, aber nicht übertragene Änderungen
Lösung

Wenn Ihre überschüssigen Übertragungen nur für Sie sichtbar sind, können Sie einfach Folgendes tun git reset --hard origin/ ausführen, um zum Ursprungsort zurückzukehren. Dadurch wird der Zustand des Repositorys auf den vorherigen Commit zurückgesetzt, und alle lokalen Änderungen werden verworfen.

Mit git revert entfernen neue Commits alte Commits auf eine Art und Weise, die die Historie aller Beteiligten in Ordnung hält.

Kommentare (11)

Löschen Sie einfach Ihren lokalen Master-Zweig und erstellen Sie ihn wie folgt neu:

git branch -D master
git checkout origin/master -b master
Kommentare (8)

Versuchen Sie es:

git reset --hard 

um Ihren Kopf dorthin zurückzusetzen, wo Sie sein wollen. Verwenden Sie gitk, um zu sehen, bei welchem Commit Sie sein wollen. Sie können das Zurücksetzen auch innerhalb von gitk durchführen.

Kommentare (2)