2016-09-14 20 views
4

私はブランチにgit push -fを行ってしまって、他の人の仕事を失いました。git push -fからの復旧方法?

他の人の仕事が表示されている(アクティビティに表示されている)が、リモートブランチでは表示されませんでした(私が変更をプッシュした場所)。残念ながら、ローカルのレポをリモコンと同期させることはありません。だから私は私の地元に他人のコードを持っていない。それを私の地元に持ち帰り、回復する方法はありますか?

+1

... 'push -f'をしないでください。 gitが競合について不平を言うなら、それが最もよくわかっていて、競合を修正すると仮定してください。 –

+0

@sashoalm:他の方法はありませんか? –

+0

失われたコミットのハッシュを知っていますか?このコミットはフェッチ後もローカルリポジトリに保持されますか? –

答えて

4

http://ohshitgit.com/

何かを行う前に、これらの3つのステップを行ってください。何も想像もできません。Ctrl + C、Ctrl + Vだけです。プロジェクト全体でそれを行い、作業ツリーをバックアップします。リモートサーバーに直接アクセスできない場合は、 git cloneで十分ですが、実際のディレクトリコピーが好きです。

これを済ませたら、他の人はgit push -fを使ってブランチを再アップロードできます。彼に新しいコミットがある場合は、最後にコミットされたコミットを把握する必要がありますが、実際のコミットが失われることはありません。他の人がgit pull -fを行った場合でも、git reflogを使用して自分のローカルブランチを回復できます。

Githubを使用しているので、https://stackoverflow.com/a/35273807/492336と表示されることもあります。どうやらGithubのEvents APIが役に立つかもしれません。

-6

私はgitユーザーではありませんが、数日前に私はこの投稿にクロスを来ました。この問題にも解決策があります。 、バックアップあなたの地元のレポを他のバックアップ彼の男、およびバックアップ彼らは今のようなリモートレポを伝える -

# 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

これは問題の解決策ではありませんが、ローカルコミットを元に戻す方法です。 – berkes

2

あなたは、これはあなたのイベントが表示されますREST-API

経由のGitHubのREFLOGにアクセスすることができます。

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

あなたが壊れていたらちょうどそれへの参照を追加コミット:

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

またはカールで:

$ 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 
関連する問題