Frage

ich verpflichten nur die falsche Quelle zu meinem Projekt --force Option.

Ist es möglich, zurückzukehren? Ich verstehe, dass alle bisherigen Zweige wurden überschrieben -f Option, so habe ich geschraubt kann meine früheren Revisionen nach oben.

War es hilfreich?

Lösung

Git im Allgemeinen nicht werfen alles weg, aber von dieser erholt sich immer noch schwierig sein kann.

Wenn Sie die richtige Quelle haben, dann könnten Sie einfach schieben in die Fernbedienung mit der --force Option. Git wird keine Zweige gelöscht haben, es sei denn Sie es gesagt. Wenn Sie Commits tatsächlich verloren haben, dann nehmen Sie einen Blick auf diese nützlichen Leitfaden zur Gewinnung von Commits . Wenn Sie den SHA-1 der Commits wissen wollen Sie dann sind Sie wahrscheinlich OK.

Das Beste, was zu tun ist: Zurück alles und sieht, was noch in Ihrem lokalen Repository ist. Machen Sie dasselbe auf der Fernbedienung, wenn möglich. Verwenden git fsck, um zu sehen, wenn Sie Dinge wiederherstellen können, und vor allem NICHT laufen git gc .

Vor vor allem nie die --force Option verwenden, wenn Sie wirklich, wirklich bedeuten.

Andere Tipps

Wenn Sie das Commit Hash wissen, es ist einfach, nur Ihre Branche neu zu erstellen.

5794458...b459f069 master -> master (forced update)

den Remote-Zweig löschen:

git push origin :master

dann Zweig mit den folgenden Befehlen erstellen:

git checkout 5794458
git branch master
git push origin master

Die Lösung wird bereits erwähnt hier

# work on local master
git checkout master

# reset to the previous state of origin/master, as recorded by reflog
git reset --hard origin/master@{1}

# at this point verify that this is indeed the desired commit.
# (if necessary, use git reflog to find the right one, and
# git reset --hard to that one)

# finally, push the master branch (and only the master branch) to the server
git push -f origin master

Wenn Sie nicht an diesem lokalen Repo sind, wo der Zwang Push kam, auf Herkunft / Master-Ebene gibt es keine Möglichkeit sich zu erholen. Aber wenn Sie auf Glück genug, um verwenden GitHub oder GitHub for Enterprise , können Sie einen Blick auf die REST API und retrieve begehen als Patch, Beispiel verloren:

  1. Liste Ereignisse und finden Sie das Commit SHA1 lange Format

https://api.github.com/repos/apache/logging- log4j2 / Ereignisse

  1. Laden Sie die verlorene begehen und rufen Sie die zugehörige Patch in den json Pfad .files [] / patch

https://api.github.com/repos/apache/ Logging-log4j2 / Commits / 889232e28f3863d2a17392c06c1dd8cac68485de

  1. Tragen Sie vor Ort und drücken Sie erneut

git apply patch.patch && git commit -m "wiederhergestellt begehen" && git push origin master

Ich habe die gleiche Sache, während eine letzte Push Verhängnis für nur eine Datei. Schließlich gehen ursprünglichen Zustand des Repository zu sichern. Ich war mit git Befehle von Linus als ich die lokale Kopie auf Linux hatte. Zum Glück, dass Kopie war noch intakt.

Alles, was ich tat, war (nach ein paar mehr Exemplare der lokalen Repo hektisch zu machen):

git add .
git status

(es, dass origin / master voraus war von 68 Commits, fein ... das waren alle Commits ich gelöscht)

git remote set-url origin <GIT_SSH_URL>
git push

Und alles wurde die Art und Weise wiederhergestellt es war, bevor ich weiter kräftig aufschieben tat. Die wichtigste Sache zu erinnern ist nie eine git Kasse zu tun. nachdem Sie kräftig gedrückt hatte. Aber die beste Praxis ist zu deaktivieren Push-Option. Ich verwende es nie wieder. meine Lektion gelernt !!

Eine weitere Möglichkeit, die verlorenen begehen oder sogar, um herauszufinden, zu erholen, was Commits verloren, wenn der vorherige Push kam nicht von Ihrem lokalen Repo steht zu Ihrer CI Maschine suchen.

Wenn Sie einen Job haben, der den Hauptzweig prüft nach jedem Commit (oder eine Reihe von aufeinander folgenden Commits), die Sie haben sollten, können Sie einen Blick haben, was es zuletzt testete. Das ist die verpflichten Sie wiederherstellen müssen.

Die CI Maschine auch einen lokalen Klon des Repo halten kann, von dem Sie in der Lage sein, diese Wiederherstellung durchführen.

Quelle: wahrscheinlich Continuous Delivery: Zuverlässige Software-Releases durch Erstellen, Testen und Deployment Automation (Addison-Wesley Signature Series (Fowler))

Hier können Sie Entscheidungen lesen https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it

Die zweite hat mir geholfen. Ich habe falsch diese Befehle

1) (some-branch) git pull -> correct command was git pull origin some-branch

2) (some-branch) git push -f origin some-branch

Nach diesen Befehlen verlor ich drei Commits. Erholen sie schaute ich zu Terminal, wo ich habe falsch ‚git pull‘ und haben dort Ausgang gesehen wie

60223bf ... 0b258eb some-Zweig -> Herkunft / some-Zweig

Der zweite Hash 0b258eb war genau das, was ich brauchte. Also, ich habe dieses Hash und produzieren Befehl

git push --force origin 0b258eb:some-branch
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top