1. ホーム
  2. git

[解決済み] リモートを特定のコミットにリセットする

2022-03-19 13:43:57

質問内容

コミット後に行われた変更をすべて破棄したい <commit-hash> . そこで、私はこうしました。

git reset --hard <commit-hash>

今度は、私のリモートで同じことをしたいのです。どうすればいいのでしょうか?の後に、いくつかのコミット(とプッシュ)を行いました。 <commit-hash> で、それらをすべて破棄したいのです。ただ、何かが 恐ろしく ってな感じで、もうこれ以上悪くしたくないんです。

基本的に巻き戻したいのは origin/master から <commit-hash>

解決方法は?

という名前のブランチがあると仮定します。 master という名前になっており、リモートは origin ができたんですね。

 git reset --hard <commit-hash>
 git push -f origin master

しかし、他の誰かがあなたのリモートリポジトリで作業しており、あなたの変更を引き出している場合は、この方法を避けるべきです。 そのような場合は 復帰 を削除し、通常通りプッシュします。

アップデートする あなたがプッシュした変更を他の人がプルしたと下で説明しているので、それは これらの変更をすべて取り消す新しいコミットを作成する方がよいでしょう。 . このオプションについては、以下のサイトで詳しく説明されています。 Jakub Narębskiの回答です。 . どれが一番便利かは、リバートしたいコミットの数と、どの方法が一番理にかなっているかによります。

ご質問の内容からすると、すでに git reset --hard をリセットするために master ブランチを使用する場合は、まず git reset --hard ORIG_HEAD を実行して、ブランチを元の場所に戻してください。 (いつもと同じように git reset --hard を使用する必要があります。 git status がクリーンであること、そして正しいブランチにいること、そして git reflog は、明らかに失われたコミットを回復するためのツールです)。 また ORIG_HEAD は正しいコミットを指しており git show ORIG_HEAD .

トラブルシューティングを行います。

のようなメッセージが表示された場合、「" ! [remote rejected] a60f7d85 -> master (pre-receive hook declined) "

の場合、特定のブランチに対してブランチ履歴の書き換えを許可する必要があります。例えばBitBucketでは、"Rewriting branch history is not allowed"と表示されました。というチェックボックスがあります。 Allow rewriting branch history をチェックする必要があります。