27

マージ地獄を引き起こしている変更を加えたリポジトリがあり、それが存在しなかったふりをしたいと思います。git-p4 を介して更新されたリポジトリの上に既存のリポジトリをスプライシングすることを含む長くて複雑な話ですが、結論としては、git に特定の変更が存在しなかったふりをさせたいということです。

Mercurial の場合、問題を解決できると確信してhg stripいますが、Git でそのようなコマンドを見つけることができません。

ご提案いただきありがとうございます。

4

3 に答える 3

33

実行する必要があるコマンドは複数あります。最初は、他の人が言及したように、git reset. 削除したい変更セットの直前にある変更セットを見つけて、

git reset --hard <changeset>

これにより、現在のブランチ ヘッド (およびインデックス) がその変更セットを指すように変更されますが、「悪い」変更セットはまだ存在しています。プッシュしても含まれませんがローカル リポジトリのクローンを作成すると含まれ、引き続き log および checkout コマンドで参照できます。

それへの他の参照 (たとえば、後続のコミット、タグなど) がないと仮定すると、次のようにクリーンアップできます。

git gc --prune=now

http://help.github.com/remove-sensitive-data/のおかげでこのコマンドを見つけました。これには、(と同様にhg strip)その「悪い」変更セットをリモートの場所にプッシュした場合、削除できないことも記載されていますこれは通常の git コマンドで実行できますが、サーバー上のリポジトリを削除して再作成し、キャッシュされたページをクリーンアップするために追加の手順を実行する必要があります。

于 2012-04-29T16:59:33.680 に答える
4

ラースクが言ったように、git reset --hardあなたが望んでいた歴史に戻るのを助けることができます:

  1. を使用して、元に戻したい正しい sha 値を見つけますgit log
  2. git reset --hard sha戻るために実行します。
于 2012-03-31T02:56:07.420 に答える
2

のドキュメントを読んでみてくださいgit reset。私は Mercurial にあまり詳しくありませんが、このドキュメントを正しく理解していればgit reset、同じこと、つまりリポジトリを履歴の前の時点にリセットすることができます。

このドキュメントではresetコマンドについて詳しく説明し、間違いを修正するためのさまざまなオプションについて簡単に説明します。

于 2012-03-31T00:46:09.000 に答える