2016-09-14 2 views
4

Ich habe eine git push -f auf einem Zweig gemacht und jetzt verloren die anderen Personen arbeiten.Wie erholt man sich von git push -f?

Ich konnte in meinem GitHub sehen, dass die andere Person Arbeit gezeigt wird (in Aktivität gezeigt), aber nicht in der Remote-Filiale (wo ich meine Änderungen drückte). Leider habe ich meine lokale Repo nicht mit der Fernbedienung synchronisieren. Also habe ich keine anderen Personen in meinem lokalen Code. Gibt es eine Möglichkeit, dass ich das zu meinem lokalen und erholen kann?

+1

... Tu 'push -f' nicht. Wenn git sich über Konflikte beschwert, nehmen Sie an, dass es am besten weiß und die Konflikte beheben –

+0

@ashoalm: Es gibt keinen anderen Weg? –

+0

Kennst du den Hash des verlorenen Commits? Wird diese Festschreibung nach dem Abruf in Ihrem lokalen Repo fortgesetzt? –

Antwort

4

Bevor irgendetwas anderes tun, tun Sie bitte die folgenden drei Schritte - ein Backup Ihrer lokalen Repo, sagen die anderen Kerl zu sichern sein, und Sicherung der Remote-Repo, wie sie jetzt sind. Nichts Besonderes, nur Strg + C, Strg + V würde tun. Machen Sie das für Ihr gesamtes Projekt, also sichern Sie auch den Arbeitsbaum. Wenn Sie keinen direkten Zugriff auf den Remote-Server haben, müsste ein git clone ausreichen, obwohl ich eine echte Verzeichniskopie bevorzugen würde.

Sobald Sie das getan haben, kann der andere Typ git push -f verwenden, um seinen Zweig neu zu laden. Wenn er neue Commits hat, müssen Sie herausfinden, welcher Commit zuletzt von ihm gepusht wurde, aber ich bin ziemlich sicher, dass keine tatsächlichen Commits verloren gehen. Wenn der andere Typ git pull -f erledigt hat, kann er auch git reflog verwenden, um seine lokale Niederlassung wiederherzustellen.

Da Sie Github verwenden, sehen Sie möglicherweise auch https://stackoverflow.com/a/35273807/492336. Anscheinend gibt es eine Github's Events API, die nützlich sein könnte.

-6

Ich bin kein Git Benutzer, aber vor ein paar Tagen kam ich ein Kreuz diesen Beitrag, ich denke, dieser hat auch eine Lösung für Ihr Problem.

http://ohshitgit.com/

# undo the last commit, but leave the changes available 
git reset HEAD~ --soft 
git stash 
# move to the correct branch 
git checkout name-of-the-correct-branch 
git stash pop 
git add . # or add individual files 
git commit -m "your message here" 
# now your changes are on the correct branch 
+0

Dies ist keine Lösung, die das Problem erfordert, sondern eine Möglichkeit, ein lokales Commit rückgängig zu machen. – berkes

2

Sie auf GitHub der reflog

über REST-API

Dies wird Ihnen Ereignisse zeigen zugreifen:

$ curl https://api.github.com/repos/<user>/<repo>/events 

Nachdem Sie gebrochen gefunden habe commit fügen Sie einfach einen Verweis darauf:

POST /repos/<user>/<repo>/git/refs 
{ 
    "ref": "refs/heads/featureA", 
    "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd" 
} 

oder mit Locke:

$ curl -i -H "Accept: application/json" -H "Content-Type: application/json" \ 
    -X POST -d '{"ref":"refs/heads/featureA", \ 
       "sha":"aa218f56b14c9653891f9e74264a383fa43fefbd"}' \ 
    https://api.github.com/repos/<user>/<repo>/git/refs