585 Stimmen

Wie macht man eine erste Git-Übertragung rückgängig?

Ich übertrage zum ersten Mal in ein Git-Repository; dann bereue ich die Übertragung und möchte sie rückgängig machen. Ich versuche

# git reset --hard HEAD~1

Ich erhalte diese Meldung:

fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.

Dieser Commit ist der erste Commit des Repositorys. Gibt es eine Idee, wie man den ersten Commit von Git rückgängig machen kann?

917voto

CB Bailey Punkte 693084

Sie müssen nur den Zweig löschen, in dem Sie sich befinden. Sie können nicht verwenden git branch -D da es eine Sicherheitsprüfung gegen dieses Vorgehen gibt. Sie können verwenden update-ref um dies zu tun.

git update-ref -d HEAD

Do no verwenden. rm -rf .git oder ähnliches, da dies Ihr gesamtes Repository einschließlich aller anderen Zweige sowie den Zweig, den Sie zurücksetzen wollen, komplett löschen wird.

120voto

frazras Punkte 5031

Sie können den HEAD löschen und Ihr Repository in einen neuen Zustand versetzen, in dem Sie eine neue initiale Übertragung erstellen können:

git update-ref -d HEAD

Nachdem Sie einen neuen Commit erstellt haben, müssen Sie, falls Sie bereits einen Push auf den Remote-Server durchgeführt haben, diesen erzwingen, um den vorherigen ursprünglichen Commit zu überschreiben:

git push --force origin

33voto

nonsensickle Punkte 4308

Diese Frage wurde verlinkt von dieser Blogbeitrag und es wurde eine alternative Lösung für die neueren Versionen von Git vorgeschlagen:

git branch -m master old_master
git checkout --orphan master
git branch -D old_master

Diese Lösung setzt voraus, dass:

  1. Sie haben nur einen Commit auf Ihrer master Zweigstelle
  2. Es gibt keinen Zweig namens old_master also kann ich den Namen frei verwenden.

Der bestehende Zweig wird umbenannt in old_master und erstellen Sie einen neuen, verwaisten Zweig master (wie es für neue Repositories erstellt wird) danach können Sie frei löschen old_master ... oder nicht. Es liegt an Ihnen.

Hinweis: Beim Verschieben oder Kopieren eines Git-Zweigs bleibt sein Reflog erhalten (siehe dieser Code ), während das Löschen und anschließende Anlegen einer neuen Verzweigung diese vernichtet. Da Sie zum ursprünglichen Zustand ohne Historie zurückkehren wollen, sollten Sie den Zweig wahrscheinlich löschen, aber andere sollten diese kleine Anmerkung beachten.

21voto

Jonathan Leffler Punkte 694013

Unter den in der Frage genannten Bedingungen:

  • Der Commit ist der erste Commit im Repository.
  • Das heißt, es wurden nur sehr wenige Befehle ausgeführt:
    • a git init ,
    • vermutlich einige git add Operationen,
    • und eine git commit ,
    • und das ist alles!

Wenn diese Voraussetzungen erfüllt sind, wäre der einfachste Weg, die ursprüngliche Übergabe rückgängig zu machen, folgender:

rm -fr .git

aus dem Verzeichnis, in dem Sie die git init . Sie können dann erneut die git init um das Git-Repository neu zu erstellen, und wiederholen Sie die Ergänzungen mit allen sinnvollen Änderungen, die Sie beim ersten Mal bedauert haben, nicht vorgenommen zu haben, und wiederholen Sie die erste Übergabe.

GEFAHR! Dadurch wird das Verzeichnis des Git-Repositorys entfernt.

Das Verzeichnis des Git-Repositorys wird dauerhaft und unwiederbringlich gelöscht, es sei denn, Sie haben irgendwo Sicherungskopien davon. Unter den gegebenen Voraussetzungen haben Sie nichts, was Sie im Repository behalten wollen, also verlieren Sie auch nichts. Alle von Ihnen hinzugefügten Dateien sind in den Arbeitsverzeichnissen weiterhin verfügbar, vorausgesetzt, Sie haben sie noch nicht geändert und nicht gelöscht usw. Diese Vorgehensweise ist jedoch nur dann sicher, wenn sich nichts anderes in Ihrem Projektarchiv befindet. Unter den Umständen, die in der Frage "Projektarchiv zum ersten Mal übertragen - und dann bereuen" beschrieben sind, ist es sicher. Sehr oft ist es jedoch nicht sicher.

Es ist auch sicher, dies zu tun, um ein unerwünschtes geklontes Repository zu entfernen; es fügt dem Repository, von dem es geklont wurde, keinen Schaden zu. Es wirft alles weg, was Sie in Ihrer Kopie gemacht haben, hat aber ansonsten keine Auswirkungen auf das ursprüngliche Projektarchiv.

Seien Sie vorsichtig, aber es ist sicher und wirksam, wenn die Voraussetzungen erfüllt sind.

Wenn Sie andere Dinge mit Ihrem Repository gemacht haben, die Sie erhalten wollen, dann ist dies nicht die geeignete Technik - Ihr Repository erfüllt nicht mehr die Voraussetzungen dafür, dass dies angemessen ist.

7voto

ma11hew28 Punkte 112879

Eine Möglichkeit besteht darin, das Repository zu löschen und ein neues anzulegen:

rm -rf .git
git init

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X