ブランチがmaster
こことリモートの両方で呼び出され、リモートが呼び出されると仮定すると、origin
次のことができます。
git reset --hard <commit-hash>
git push -f origin master
ただし、他の誰かがリモートリポジトリで作業していて、変更をプルした場合は、これを行わないでください。その場合は、不要なコミットを元に戻し、通常どおりにプッシュすることをお勧めします。
更新:プッシュした変更を他の人がプルしたことを以下で説明しました。そのため、それらの変更をすべて元に戻す新しいコミットを作成することをお勧めします。JakubNarębskiからのこの回答には、これを行うためのオプションについての素晴らしい説明があります。どの方法が最も便利かは、元に戻したいコミットの数と、どの方法が最も理にかなっているかに依存します。
あなたの質問から、あなたがすでにgit reset --hard
あなたのmaster
ブランチをリセットするために使用したことが明らかであるので、あなたはgit reset --hard ORIG_HEAD
あなたのブランチを以前の場所に戻すためにを使用することから始める必要があるかもしれません。(いつものようにgit reset --hard
、それgit status
がクリーンであること、正しいブランチにいること、そしてgit reflog
明らかに失われたコミットを回復するツールとして認識していることを確認してください。)またORIG_HEAD
、で正しいコミットを指していることを確認する必要がありgit show ORIG_HEAD
ます。
トラブルシューティング:
「![リモート拒否] a60f7d85->マスター(事前受信フックは拒否されました)」のようなメッセージが表示された場合
次に、特定のブランチのブランチ履歴の書き換えを許可する必要があります。たとえば、BitBucketでは、「ブランチ履歴の書き換えは許可されていません」と述べています。Allow rewriting branch history
あなたがチェックしなければならないという名前のチェックボックスがあります。
origin/master
が他のユーザーに引っ張られたり押し付けられたりしていませんか?パブリック(つまり、非ローカル)リポジトリの変更履歴は、常に回避したいものです。