ローカルおよびリモートの Git リポジトリを 1 コミットずつロールバックする [重複] 質問する

ローカルおよびリモートの Git リポジトリを 1 コミットずつロールバックする [重複] 質問する

このトピックに関する同様の投稿を読みましたが、これを適切に行う方法がどうしてもわかりません。

不要なファイルを約 1000 個チェックインしましたが、1 つ 1 つ確認してリポジトリからすべて削除するのは避けたいです。

  • リモートmasterブランチがあります。
  • 地元の支店がありますmaster

どちらも同じリビジョンです。

リモートを 1 コミット分ロールバックしたいです。

の履歴が であるとしmasterますA--B--C--D--E
ローカルを にロールバックしますD
次にそれをリモートにプッシュして、現在のハッシュがリモートとローカルの両方で D になるようにします。

これを実行すると問題が発生します。Git
Tower を使用していますが、コマンド ラインに慣れています。何か助けはありますか?

更新:以下に素晴らしいコメントがあります。特にリポジトリが他のユーザーと共有されている場合、リセットの使用は部分的に推奨されないようです。ハードリセットを使用せずに以前のコミットの変更を元に戻す最善の方法は何ですか? 方法はありますか?

ベストアンサー1

まだ誰もリモート リポジトリをプルしていない場合は、ブランチ HEAD を変更して、そのリモート リポジトリに強制的にプッシュできます。

git reset --hard HEAD^ 
git push -f 

(または、リモート リポジトリに直接アクセスできる場合は、ベア リポジトリであっても HEAD 参照を変更できます)

注意:下記のコメントalien-technologyがコメントしているように、Windows (CMD セッション) では以下が必要になります。^^

git reset --hard HEAD^^
git push -f 

そして?ジョン・シュナイダーコメントに書かれているように:

「 」を含むコマンドのHEAD^結果が の場合はerror no matches found: HEAD^、「git show HEAD^が動作していないようです。これは正常ですか?」を参照してください。

2011 年以降の更新: (ここで紹介する
、2013 年に Git 1.8.5 で導入された)を使用する方が安全です。git push --force-with-lease

例として、Schwern回答を参照してください。


誰かがすでにリポジトリをプルしていたらどうなりますか? その場合はどうすればよいですか?

そこで私は歴史を書き換えない何かを提案したいと思います。

  • git revertローカルで最後のコミット(前のコミットを元に戻した新しいコミットを作成する)
  • によって生成された「元に戻す」をプッシュしますgit revert

おすすめ記事