web-dev-qa-db-ja.com

Mercurial Eclipseプラグインのロールバック、バックアウト、ストリップの違いは何ですか?

Mercurial Eclipseプラグインのメニュー項目のロールバック、バックアウト、ストリップの違いは何ですか?

この3つのコマンドのいずれかでワークスペースのファイルを変更せずに、ローカルリポジトリのコミットを削除できますか?

または、プロジェクトの別の部分に修正をコミットしてプッシュする別のソリューションがありますか?私の現在の仕事は終了しておらず、プッシュできません。しかし、プロジェクトの別の部分の簡単な修正をチェックインする必要があります。

私が見る唯一の解決策は、2番目のワークスペースを作成することです。しかし、これは私にとってやり過ぎのように見えます。

49
Horcrux7

これらのコマンドはすべてMercurial自体からのものであり、それらに対する多くの優れた比較/コントラストの投稿があります。ただし、ここでは簡単に説明します。

  • rollback:1レベルの取り消し。最後のプルまたはコミットを元に戻します(は危険な場合があります
  • backout:指定されたコミットの逆である新しいコミットを作成します。ネット効果は元に戻しますが、変更は履歴に残ります。
  • strip:履歴から(destroy)変更を削除します。変更セットを削除すると、そのすべての子も削除されるため、スライスの削除ではなく、履歴の切り捨てにのみ使用できます。

3つすべてについて、ここで詳しく説明します。 http://www.selenic.com/Mercurial/hg.1.html

質問2では、stripを使用して最新のコミットを削除することができ、作業ディレクトリの変更は変更されません。

質問3に対して、このプロジェクトの別の部分を簡単に変更できます。

hg commit -m 'commit your half done work'
hg update OLDERCHANGESET # your working directory now is without the half-done-work
.. do that quickfix ...
hg commit -m 'quickfix'
hg Push tip # this pushes the tip revision (latest) and its ancestors, but the half-don't work isn't an ancestor so it doesn't get pushed
hg update HALFDONEWORK # you can find the right revision number using "hg heads"

これは「匿名ブランチ」と呼ばれ、非常に一般的な作業方法です。完成した機能をコミットすることになりますが、後で再開することができ、プッシュする必要はありません。

これには、匿名ブランチの素晴らしい説明があります。 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-Mercurial/#branching-anonymously

62
Ry4an Brase