2017-05-06 21 views
2

githubにフォークしたレポがあります。私はSYNCにgit remote -vgit push forceの後にコミットが削除されました

origin [email protected]:some_repo.git (fetch) 
origin [email protected]:some_repo.git (push) 
upstream [email protected]:some_repo.git (fetch) 
upstream [email protected]:some_repo.git (push) 

コマンドようupstreamエンドポイントを作成する生産1で私のフォークレポを同期、私はこの

git fetch upstream;git checkout master;git merge upstream/master 

しかし、紛争のトンで失敗したマージを実行しました。だから私は、マージを強制することを決定し、これは私の地元のmasterブランチに上流のmasterブランチから強制的思考

git push --force upstream master:master

を走りました。

問題は私が間違っていて、フォークされたレポの状態がリモートのアップストリームブランチにプッシュされているため、アップストリームのリモートブランチ上のすべてのコミットが失われたように見えます。私のフォークレポ上流のリモートブランチの実際の状態を復旧するにはどうすればよいですか?

答えて

3

あなたが行ったことは、あなたがその逆を行うことを意図していた間に、あなたのローカル履歴でリモートのレポ履歴を置き換えることでした。あなたがやるべき何

た:

git reset --hard upstream/master 

しかしupstream/masterがなくなっているので、あなたの地元のgit reflogでそれを見ることができるかどうかを確認してください。

GitHubは、「Does github remember commit IDs?」のプッシュイベントを追跡しています。https://api.github.com/repos/<user>/<repo>/events URLをカールしてプッシュイベントを検索すると、自分の前にマスターにプッシュされたコミットを見つけることができます。

コミットしたら、ローカルブランチにリセットして、もう一度押すことができます。

git reset --hard old_sha1 
git push --force upstream master:master 
+0

本当に奇妙ですが、私は単純に 'git add'と' git commit ... 'に進み、9つの新しいコミットをすべて回復しました。しかし、2つのことは非常に奇妙です:1) 'git reset -hard HEAD ^'を実行すると、9つのコミットの後ろに行きます。これらの9つのコミットは、1つの単一コミットに対応しているようです。次に、いくつかのファイルを削除し、いくつかのファイルを削除し、新しい作業を追加し、コミットした後、いくつかのファイルを削除しようとしたところ、 '警告:バイナリファイルをマージできません:... - エラー:SHA1_commitを適用できませんでしたバイナリファイルは正確に私が削除したものです。アイデアはありますか? – Newben

+0

@Newbenこれはマージコミット(あなたが最初のプルで行ったもの) – VonC

+0

@Newben可能であれば、reflogをチェックしてブランチをアップストリーム/マスターのsha1にリセットします – VonC

関連する問題