Ich bin nur versehentlich gelaufen git push -f
und habe so einen Remote-Zweig überschrieben.
Original:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
Nachher git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
In meinem lokalen Repository, ich arbeite auf dem master
Zweig, so dass ich die Niederlassung wiederherstellen master
zu begehen aaaaaaa
, weil ich bekommen begehen kann aaaaaaa
aus git reflog
. Ich konnte mich jedoch nicht festlegen, bbbbbbb
weil ich vorher nicht gezogen habe git push -f
.
Ich habe es git reflog
im Remote-Repository versucht , aber es gibt nichts Nützliches beim Reflog im Bare-Repository.
Wie kann ich den Zweig wiederherstellen foo
, um ihn bbbbbbb
im Remote-Repository festzuschreiben?
(PS Ich kenne den tatsächlichen Wert von nicht bbbbbbb
.)
git
file-recovery
Xiè Jìléi
quelle
quelle
Antworten:
Versuche dies:
Stellen Sie über SSH eine Verbindung zur Fernbedienung her.
Erstellen Sie eine Sicherungskopie des gesamten Remote-Repositorys.
Wenn Sie mindestens die ersten Zeichen von kennen
bbbbbbb
, verwenden Siegit show bbbbbb
und / odergit log bbbbbb
, um den vollständigen Commit-Hash herauszufinden. (Wenn Sie nur den Hash benötigen,git rev-parse bbbbbb
funktioniert dies auch, aber es ist immer besser zu überprüfen.)Wenn Sie den Wert nicht wissen überhaupt , laufen
git fsck
und Sie sollten eine Liste von „baumelnden Commits“ bekommen. Untersuchen Sie jedes Commit mitgit show <hash>
und,git log <hash>
bis Sie das richtige gefunden haben.Aktualisieren Sie die Zweigstellenreferenzen:
Verwenden Sie
git log master
und,git log foo
um sicherzustellen, dass Sie die richtigen Zweige wiederhergestellt haben.quelle
git fsck
.Es ist wahrscheinlich, dass auch andere Dienste solche anbieten. Es spart Tag.
quelle