Mercurial は簡単な代替手段を提供しておらず、変更可能な履歴という考えを避けていますが、それに近いものを実現する方法がいくつかあります。この投稿では、それらのいくつかの概要を説明します。
hg ロールバック
最後のコミットを特に取り消したい場合は、次を使用できます。
hg rollback
これにより、コミットが取り消されます (作業ツリーには影響しません。作業ディレクトリ全体もリセットしたい場合は、 hg revert --all
orで追跡できるはずです)。hg update -C
hg クローン -r
giraffe
リビジョン 77182fb7451f に呼び出されたリポジトリをリセットするとします。cd
親ディレクトリに入って実行した場合:
hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/
その後、リビジョン 77182fb7451f のリポジトリである new-giraffe になります。(これcp
は、new-giraffe (git の「リモート」など)がデフォルトのフォルダーでpaths
はなく、元のリポジトリを正しく指すようにするために必要です。)giraffe
これは、ファイルをディスクにローカルにコピーするだけなので (多くのシステムでは、時間とスペースをさらに節約するためにファイルをハードリンクするため)、インターネットから再クローンするよりも高速ですが、リポジトリが大きい場合は依然として非常に時間がかかる可能性があります。
hgストリップ
コミット履歴を変更してより複雑なことをしたい場合 (ちなみに、hg の世界ではやや眉をひそめています)、最初に次.hgrc
の行を等号の後):
[extensions]
mq =
hg strip
これにより、変更セットとそのすべての子孫をリポジトリから完全に削除するコマンドが (他の便利なものとともに) 提供されます。したがって、次のようなコマンドを使用できます。
hg strip 1cc72d33ea76
1cc72d33ea76 が、削除したいリポジトリ内の最初の「悪い」変更セットである場合。
hg heads
残念ながら、この方法を使用して正確に正しい変更セットを削除することはしばしば困難であり、複数のヘッド ( を使用して表示できます) で終わるのは非常に簡単ですhg strip
。余分な頭。
revsetを使用したhgストリップ
hg revsetsを使用すると、次のようなコマンドを使用して、元に戻したいリビジョンの祖先ではない.
(現在のリビジョン) のすべての祖先を削除できます。
hg strip "ancestors(.) and not ancestors(77182fb7451f)"
最初に実行することを確認してください:
hg log -r "ancestors(.) and not ancestors(77182fb7451f)"
これにより、削除されるすべての変更セットが表示されるhg strip
ため、コミット履歴に取り返しのつかないほどの損害を与えないようにすることができます (バックアップがあるため… ですよね?)。