12

uncommitBazaar には、最後のコミットを単純に元に戻す素晴らしいコマンドがあります。Mercurial に相当するものはありますか?

編集: Bazaar の uncommit コマンドはファイルを変更しません – 最後のコミットと関連データを削除します (たとえば、コミット メッセージにタイプミスがある、または追加されるべきファイルが追加されていないことに遅すぎることに気付いた場合に役立ちます) .

例えば:

$ bzr ci -m "Fixed a proooblem" <-- problem is misspelt
$ bzr uncommit
...
$ bzr ci -m "Fixed a problem" <-- Exactly as if the first commit was correct.
4

5 に答える 5

23

コマンドが必要hg rollbackですが、Mercurial 2.2 以降を使用している場合は以下を参照してください。

rollback コマンドは、リポジトリから最後のトランザクションを削除します。コミットはトランザクションなので、これを次のように使用できます。

% hg commit -m 'My elaburate bugfix.' foo.c foo.h
% hg rollback
% hg commit -m 'My elaborate bugfix.' foo.c foo.h

ロールバック後、ファイルは再び変更されたものとして表示されます。これは、2 回目のコミットが最初のコミットと同じ変更を保存することを意味しますが、コミット メッセージはより適切になります。

注意: hg rollback単純な「コミット解除」機能よりも強力で、注意しないと作業を破棄するために使用できます。コミットを捨てるには

$ hg commit -m 'My big and very difficult bugfix'
$ hg pull --update
$ hg rollback

最後に行ったコミットが失われ、作業コピーを別のリビジョンに更新したため、そのコミットの変更はなくなりましたhg rollbackそのため、コミットを元に戻すために使用するのは、それhg commitが実際に作業コピーを操作した最後のコマンドであることが確実な場合に限るべきです。

また、コマンド ラインでコミット メッセージを指定していない場合は、ロールバック後に上矢印を 2 回押してコミットをやり直すことはできません。ただし、Mercurial 1.5 以降では、最後のコミット メッセージが保存される.hg/last-message.txtため、ロールバック後にいつでも見つけることができます。

Mercurial 2.2 には の新しい--amendフラグがありhg commitます。これにより、最後のコミットを新しい変更で修正できます。hg statusロールバックして再度コミットしたかのように、リストされた変更を親コミットに組み込むだけです。

于 2009-05-28T17:08:36.017 に答える
8

たぶんhg backout tip?に関するすべての詳細、 との違い、および多くの関連トピックについてはhttp://hgbook.red-bean.com/read/finding-and-fixing-mistakes.htmlをお勧めしますが、何が何をするのか理解できない場合は、とまったく同じです。hg backouthg revertuncommithg backout tip

編集:コメントで、「履歴を削除」したいことを明確にしました-それは難しいです(おそらく、ドローが非常に速い場合を除きます;-)...小豆の本ごとに再び:

Mercurial は履歴を累積的なものとして扱うため (すべての変更はそれ以前のすべての変更の上に構築されます)、一般的に、悲惨な変更をただ消し去ることはできません。1 つの例外は、変更をコミットしたばかりで、別のリポジトリにプッシュまたはプルされていない場合です。そのとき、hg rollback コマンドを安全に使用できます

したがって、「それを消したい」だけの場合(そして、幸運にも他の場所でプッシュまたはプルされていない場合) はhg rollback、より良いアプローチになる可能性があります!

于 2009-05-28T01:53:56.407 に答える
0

「hg revert」はそれをしませんか?

于 2009-05-28T01:47:44.127 に答える
0

「mq」拡張子の「hg strip」コマンドもあります。これは、「bzr uncommit」とほぼ同じです。ただし、誤ったコミットを以前に別のリポジトリにプッシュした場合、そこから最も近いプルで再作成されることに注意してください。

于 2010-05-31T13:17:32.483 に答える