Wie setze ich ein Remote-Git-Repository zurück, um alle Commits zu entfernen?

164

Wie kann ich ein entferntes und lokales Git-Repository zurücksetzen, um alle Commits zu entfernen?

Ich möchte mit dem aktuellen Head als anfänglichem Commit neu beginnen.

Priyank Bolia
quelle
Ich möchte keine Kirschen auswählen oder etwas anderes tun, ich möchte nur alle Änderungen entfernen und auch das öffentliche Repo zurücksetzen. Da ich ein neuer Git-Benutzer bin, habe ich einige falsche Commits gemacht. Das Entfernen des .GIT-Verzeichnisses ist keine Option, da es auch ein öffentliches Repository gibt.
Priyank Bolia
Sie können auch einen Force-Push ausführen, sodass das Entfernen des .git-Verzeichnisses tatsächlich eine Option ist.
Lilith River
2
Nur Nitpicking, aber "Revision" ist eine SVN-Terminologie und macht in einer baumförmigen Geschichte wenig Sinn.
Tamás Szelei
2
@ TamásSzelei "Revision" ist ein durchaus akzeptables Synonym für "Commit". Es wird sowohl im Pro Git-Buch (z. B. hier ) als auch in den Git-Manpages verwendet.
Jub0bs

Antworten:

348

Vollständig zurückgesetzt?

  1. Löschen Sie das .gitVerzeichnis lokal.

  2. Erstellen Sie das Git-Repostory neu:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Push auf Remote-Server, überschreiben. Denken Sie daran, dass Sie alle anderen durcheinander bringen werden. Sie sollten besser der einzige Kunde sein.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Lilith River
quelle
1
Die Commits sind jedoch nicht mehr vorhanden und das Repository wird zurückgesetzt. Können wir diese vorherigen Nachrichten auch vor den Dateinamen entfernen?
Priyank Bolia
2
Entfernen Sie das Remote-Repository direkt auf GitHub und erstellen Sie es dort neu.
Bombe
1
Sollte Git Push - Force anstelle von Git Push
William Notowidagdo
6
Wenn Sie in Ihrem "Initial Commit" keine Dateien festschreiben möchten, können Sie einfach keine Dateien hinzufügen und das --allow-emptyFlag am Ende von hinzufügen git commit -m 'Initial commit'.
Raf
2
Mit Git 2.3.2 musste ich verwenden, git push --force --set-upstream origin masteraber der Rest funktionierte wie beschrieben
Sébastien Stormacq
6

Befolgen Sie zunächst die Anweisungen in dieser Frage, um alles zu einem einzigen Commit zusammenzufassen. Drücken Sie dann zwangsweise auf die Fernbedienung:

$ git push origin +master

Und optional alle anderen Zweige sowohl lokal als auch remote löschen:

$ git push origin :<branch>
$ git branch -d <branch>
R. Martinho Fernandes
quelle
0

Wäre ich du, würde ich so etwas tun:

Bevor Sie etwas unternehmen, bewahren Sie bitte eine Kopie auf (besser sicher als leid).

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Danach können Sie andere Zweige löschen.

Ergebnis: Sie werden eine Filiale mit nur 2 Commits haben.

Verwenden git log --onelineSie diese Option, um Ihre Commits minimalistisch anzuzeigen und SHA-1 für Commits zu finden!

Kwnstantinos Nikoloutsos
quelle