web-dev-qa-db-ja.com

Mercurialでコミットを削除するにはどうすればよいですか?

Mercurialのコミットを完全にリポジトリに入力されなかったかのように完全に削除し、以前のコミットに戻りたいです。

これは可能ですか?

55
mdp

それが最後のコミットであり、どこにもプッシュしていない場合は、rollbackでそれを行うことができます。そうでなければ、いいえ。あんまり。パスワードを変更するとき。

編集:古いリビジョンからクローンを作成し、保持したい変更をマージできることが指摘されています。また、あなたがコントロールしていないレポジトリにプッシュしない限り、それは真実です。プッシュすると、データを取得するのが非常に難しくなります。

33
nmichaels

コミットに関するmq情報を削除してみることができます。

  • このためには、File-> Settings-> Extensionsに行く必要があります。
  • そこでmqを確認し、guiを再起動します。
  • その後、不要なコミットとModifyHistory-> Stripを右クリックしてください
29
Stanislav

履歴を編集するには、 Histedit Extension 拡張機能を使用します。

 hg histedit 45:c3a3a271d11c

ただし、これはコミットをまだ公開リポジトリにプッシュしていない、公開リポジトリを所有している、および/またはそこにあるすべてのクローンを説明できる状況でのみ意味があることに留意してください。次のエラーが表示される場合:

abort: can't rebase immutable changeset 43ab8134e7af

これは、Mecurialがこれがすでにプッシュされたパブリックチェンジセット( phases を参照)であると見なしていることを意味します-再度draftに強制することができます:

hg phase -f -d 45:c3a3a271d11c
10

私はかなり頻繁にこれに遭遇します。私はコミットし、その後プッシュしてプルします。しかし、その後、新しく作成されたコミットを不要にする何かがやってくる。平野 hg rollbackはプルを元に戻すだけなので十分ではありません...

これはやるべきことです:

hg strip <rev>

チェンジセットをどこにもプッシュしなくても問題はありません。

6
souser12345

複数のコミットであるか、すでに他の場所にプッシュしている場合は、リポジトリを複製して、複製する必要のある最後の変更セットを指定できます。

これを行う方法はこちらの私の答えをご覧ください:
Mercurial:中断された履歴を修正

ローカルでのみコミットし、プッシュしなかった場合は、クローンをローカルに作成するだけで(私のリンクで説明されているように)完了です。

すでにリモートリポジトリにプッシュしている場合は、クローンに置き換える必要があります。
もちろん、これを行うことができる(または許可される)かどうかによって異なります。

5

「hg backout」を使用して、基本的に逆マージを実行できます。すべてのオプションは、無料で入手できる本「Mercurial:The Definitive Guide」で説明されています。

http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

5
Jeremy Whitlock

亀を使用している場合は、変更履歴を使用することができます>ストリップ...

3
user1875812

はい。誤解がない限り、v2.3(rel。2012/08/01)では、HisteditExtension dropコマンドを使用してコミットを削除し、stripまたはbackoutを使用して変更を削除できます。

この機能に関する簡単なGoogle検索: https://www.google.com/webhp#q=histedit+drop

1
Jon Davis