65 Stimmen

Ist es möglich, ein entferntes Git-Repository vollständig zu leeren?

Angenommen, ich mache bei meinem ersten Push an ein entferntes Git-Repository einen Fehler. Kann ich das irgendwie rückgängig machen, so dass das Repository wieder in den Ausgangszustand versetzt wird? Ich habe keinen Zugriff auf den entfernten Rechner, also ist das Löschen des .git-Verzeichnisses nicht möglich.

Das Problem, das ich sehe, ist, dass man den Kopf nicht "abschalten" kann.

Dies ist, was ich (oder eigentlich ein Kollege, der danach gefragt hat) getan habe (ich mache hier ein lokales "Remote"-Repositorium, so dass jeder dies testen kann):

mkdir git-remote
cd git-remote
git init --bare
cd ..
mkdir git-local
cd git-local
git clone ../git-remote .
touch a
git add a
git commit -m "initial"
git push origin master

Und an diesem Punkt wurde ihm klar, dass er die falschen Daten in das entfernte Repository übertragen hatte.

Die einzige Idee, die ich hatte, war, alles aus seinem Repo zu löschen && git rm && git push, was den fehlerhaften Commit immer noch dort lassen würde, aber die Dateien würden einen zweiten Push nicht stören.

0 Stimmen

0 Stimmen

Sieht so aus, als ob in diesem Fall noch mindestens ein Commit übrig ist. Ich möchte dort keinen einzigen Commit haben.

97voto

Cascabel Punkte 449595

Ich glaube, Sie haben ein XY-Problem. Sie müssen das entfernte Repository nicht in seinen ursprünglichen Zustand zurückversetzen, um neu zu beginnen; Sie müssen einfach lokal neu beginnen und dies dann auf das entfernte Repository übertragen.

# create a new repository that has the initial commit that you want
mkdir foo; cd foo; git init; ...; git commit

# set up a remote
git remote add origin <url-of-remote>
git branch --set-upstream master origin/master

# push your new history
git push -f

# delete obsolete remote branches
git push origin :deprecated-branch

Das entfernte Repository kehrt nie in einen No-Commits-Zustand zurück, aber es landet dort, wo Sie es haben wollen, und das ist alles, was zählt!

(Unter der Haube sind die alten Commits tatsächlich immer noch im entfernten Repository, aber sie hängen herum, ohne dass Refs auf sie verweisen. Sie werden automatisch entfernt, wenn git gc --auto wird irgendwann durch einen Push ausgelöst).

Wenn Sie es wirklich aus irgendeinem Grund leeren wollen, können Sie die receive.denyDeleteCurrent im entfernten Repository und löscht alle Zweige, einschließlich des aktuellen Zweigs, per Push. Ich wüsste allerdings nicht, warum Sie das wirklich brauchen!

9voto

Die folgenden Schritte sind einfach zu bewerkstelligen. Achten Sie darauf, im Bedarfsfall ein Master-Backup zu erstellen.

mkdir  reset
cd reset
 git init
 touch README.md
 git add .
 git commit -m 'Initial commit'
 git remote add origin git@github.com:XXX/xxx.git
 git push --force --set-upstream origin master

5voto

John Bachir Punkte 21921

Wenn Sie "erster Push" sagen, meinen Sie dann den allerersten Push für den Zweig überhaupt? Das heißt, es war überhaupt kein Code darin, bevor Sie ihn gepusht haben. Wenn das der Fall ist

Wenn Sie einen lokalen Zweig verschieben wollten foo zum ersten Mal auf einen entfernten Zweig zugreifen, würden Sie dies tun:

git push origin foo:foo

Um die löschen entfernte Niederlassung foo sagen Sie git, dass es "nichts" pushen soll:

git push origin :foo

Jetzt können Sie damit anfangen, wie Sie wollen.

Um ehrlich zu sein, bin ich mir nicht sicher, was tatsächlich physisch auf dem Server verbleibt - aber im Hinblick auf das vollständige Zurücksetzen der Verzweigungshistorie wird dies funktionieren.

(Übrigens finde ich diese Schnittstelle ziemlich lächerlich)

3voto

Mayank Dudakiya Punkte 3212

Der beste Weg, das GitHub-Repository zu leeren.

Schritt 1: Erstellen Sie einen neuen Zweig. git checkout -b master1

Schritt 2: Fügen Sie Ihre Daten in seine.

git add .

git commit -m "Initial commit"

git push origin master1

Schritt 3: Entfernen Sie nun den alten Master-Zweig.

git push origin --delete <your_branch>

1voto

Elon Bezos Punkte 39

Was ich getan habe, ist:

  1. Erforderliche Sicherungskopie des Codes erstellen
  2. dieses Repo komplett löschen
  3. ein Repo mit demselben Namen neu erstellen

:tada:

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