Ich habe gerade die falsche Quelle für mein Projekt mit der --force
Option festgeschrieben .
Ist es möglich, zurückzusetzen? Ich verstehe, dass alle vorherigen Zweige mit der -f
Option überschrieben wurden , sodass ich möglicherweise meine vorherigen Überarbeitungen vermasselt habe.
git
git-commit
git-push
David van Dugteren
quelle
quelle
Antworten:
Git wirft im Allgemeinen nichts weg, aber es kann immer noch schwierig sein, sich davon zu erholen.
Wenn Sie die richtige Quelle haben, können Sie sie mit der
--force
Option einfach in die Fernbedienung schieben . Git hat keine Zweige gelöscht, es sei denn, Sie haben es gesagt. Wenn Sie tatsächlich Commits verloren haben, lesen Sie diese nützliche Anleitung zum Wiederherstellen von Commits . Wenn Sie die SHA-1 der gewünschten Commits kennen, sind Sie wahrscheinlich in Ordnung.Am besten sichern Sie alles und sehen Sie, was sich noch in Ihrem lokalen Repository befindet. Machen Sie dasselbe nach Möglichkeit auf der Fernbedienung. Verwenden
git fsck
Sie diese Option, um festzustellen, ob Sie Dinge wiederherstellen können, und führen Sie sie vor allem NICHT ausgit gc
.Verwenden Sie die
--force
Option vor allem niemals, es sei denn, Sie meinen es wirklich ernst.quelle
git reflog show remotes/origin/master
. Sie sollten in der Lage sein, Ihren Push dort zu sehen; Das Commit in der vorherigen Zeile befindet sich dort, wo es war, bevor Sie es durcheinander gebracht haben. Sie können diese Revision dann einfach (mit--force
) zum Ursprung schieben und wieder da sein, wo Sie waren!git fetch
bearbeitet wurde) kannst du das Reflog von GitHubs Seite anzeigen und dich erholen!Wenn Sie den Commit-Hash kennen, ist es einfach, erstellen Sie einfach Ihren Zweig neu.
Löschen Sie den Remote-Zweig:
Erstellen Sie dann Ihren Zweig mit den folgenden Befehlen neu:
quelle
Die Lösung wird bereits erwähnt hier
quelle
git reflog show remotes/origin/master
wenn Git Reflog notwendig ist (wie von @Cascabel oben erwähnt)Wenn Sie sich nicht in dem lokalen Repo befinden, von dem der erzwungene Push stammt, gibt es auf Ursprungs- / Master-Ebene keine Möglichkeit, sich zu erholen. Wenn Sie jedoch das Glück haben, GitHub oder GitHub for Enterprise zu verwenden , können Sie einen Blick auf die REST- API werfen und das verlorene Commit als Patch abrufen. Beispiel:
quelle
Eine andere Möglichkeit, das verlorene Commit wiederherzustellen oder sogar herauszufinden, welche Commits verloren gegangen sind, wenn der vorherige Push nicht von Ihrem lokalen Repo stammt, besteht darin, sich Ihren CI-Computer anzusehen.
Wenn Sie einen Job haben, der den Hauptzweig nach jedem Commit (oder einer Reihe aufeinanderfolgender Commits) testet, den Sie haben sollten, können Sie sich ansehen, was zuletzt getestet wurde. Dies ist das Commit, das Sie wiederherstellen müssen.
Der CI-Computer behält möglicherweise sogar einen lokalen Klon des Repos, von dem aus Sie möglicherweise diese Wiederherstellung durchführen können.
Quelle: wahrscheinlich Continuous Delivery: Zuverlässige Softwareversionen durch Automatisierung von Builds, Tests und Bereitstellungen (Addison-Wesley Signature Series (Fowler))
quelle
Ja, Sie können Commits nachher wiederherstellen
git push -f your_branch
So können Sie tun:
1-
git reflog
2- Sie wählen Head_Number, mit dem Sie wiederherstellen möchten
git reset –hard HEAD@{HEAD-NUMBER}
3- Sie können alle Commits auf diesem Kopf von sehen
git cherry -v branch_name
4- Am Ende sollten Sie einen Druck erzwingen
git push -f branch_name
ODER
1- Holen Sie sich die Anzahl der SHA von Ihrem GIT-Client (Schnittstelle)
2- Druck drücken
Hoffe das hilft
quelle
Ich habe das Gleiche getan, als ich einen letzten Push für nur eine Datei rückgängig gemacht habe. Am Ende kehrte ich zum ursprünglichen Zustand des Repositorys zurück. Ich habe Git-Befehle von Linus verwendet, da ich die lokale Kopie unter Linux hatte. Zum Glück war diese Kopie noch intakt.
Alles, was ich getan habe, war (nachdem ich einige weitere Kopien des lokalen Repos angefertigt hatte):
(Es hieß, dass Origin / Master 68 Commits voraus war, okay ... das waren alle Commits, die ich gelöscht habe.)
Und alles wurde so wiederhergestellt, wie es war, bevor ich gewaltsam Druck ausübte. Das Wichtigste, an das Sie sich erinnern sollten, ist, niemals einen Git-Checkout durchzuführen. nachdem Sie gewaltsam gedrückt hatten. Die beste Vorgehensweise ist jedoch, die Push-Option zu deaktivieren. Ich benutze es nie wieder. Habe meine Lektion gelernt !!
quelle
Hier können Sie Entscheidungen lesen https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it
Der zweite hat mir geholfen. Ich habe diese Befehle falsch gemacht
Nach diesen Befehlen habe ich drei Commits verloren. Um sie wiederherzustellen, habe ich zum Terminal geschaut, wo ich fälschlicherweise "Git Pull" gemacht habe und dort eine Ausgabe wie gesehen habe
60223bf ... 0b258eb ein Zweig -> Ursprung / ein Zweig
Der zweite Hash 0b258eb war genau das, was ich brauchte. Also nahm ich diesen Hash und erzeugte den Befehl
quelle
Für Leute in wirklich schlechten Situationen wie ich (zum Beispiel, wenn
bad object
beim Laufen Fehler auftretengit reset --hard
):Ich habe ein Skript namens TreeSaver geschrieben , das als letzten Ausweg alle Ihre Dateien von der GitHub-API abruft . So verwenden Sie es:
treesaver
Skript undcd
darauf.SHA
Zeichenfolge des Baums, den Sie wiederherstellen möchten, indem Sie auf zugreifenhttps://api.github.com/repos/<your_username_or_org>/<repo>/events
.payload
Suchencommit
Sie in der Eigenschaft, die Ihrem Push-Ereignis entspricht, das Objekt, zu dem Sie zurückkehren möchten, und klicken Sie daraufurl
.commit.tree
Kopieren Sie dietree
‚surl
.python3 main.py <tree_url> <path_to_save_to>
.In meinem Fall würde ich beispielsweise Folgendes ausführen:
PRs sind natürlich willkommen.
quelle