私はMercurialを使用しようとしているGitユーザーです。
起こったことは次のとおりです:hg backout
元に戻したいチェンジセットで。これにより新しいヘッドが作成されたため、hgからマージするように指示されました(「デフォルト」に戻ると思われます)。マージ後、まだコミットする必要があることがわかりました。それから、マージの競合を解決するときに間違ったことに気づき、hg backout
、つまり、このコミットされていないマージを削除する必要があります。 Gitでは、このコミットされていないものがインデックスに含まれるので、git reset --hard HEAD
それを一掃しますが、私が読んだものから、インデックスはMercurialに存在しません。それでは、どうすればこれを取り消すことができますか?
まだコミットしておらず、まだ行っていないように思える場合は、hg update --clean
。
ただし、新しいMercurialには、単一のファイルを再マージする便利なコマンドがあります:hg resolve path/to/file.ext
。から hg help resolve
:
The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and
最初からマージを再開します: "hg resolve file ..."(またはすべての未解決ファイルの場合は "-a")
これは近いです:
hg update --clean
Hgマニュアルの GitConcepts ページでは、git
ユーザーがMercurialでよく知っている多くのアクションの実行方法について説明しています。
Mercurialには、組み込みのgit reset --hard
動作がありません。ただし、strip
拡張機能は、strip
コマンドを提供します。使用するには、 最初にstrip
を有効にします~/.hgrc
ファイルで::
[extensions]
strip =
注:この拡張機能は、Mercurial 2.8の新機能として出荷されます。以前のバージョンでは、 strip
拡張 。でmq
コマンドが提供されていました
これで、hg strip
またはhg help strip
などのコマンドを実行できます。変更セットとそのすべての子を削除するには、その変更セットをhg strip
への引数として指定するだけです。たとえば、直前に行ったコミットを削除するには(hg rollback
がロールバックするトランザクションがなくなったことを報告するコマンドを使用した後)、tip
リビジョンを削除できます。このコマンドを実行するたびに、別のリビジョンが削除されます。 hg strip
のアクションは元に戻せないと見なされる必要があります。なじみのないユーザーは、使用する前にリポジトリのバックアップを作成する必要があります。
$ hg strip tip
たとえば、 revsets syntax を使用すると、hg heads
の実行時に余分なヘッドが表示される私のコミットを削除することを示します。以下の式でtip
以外の特定のリビジョンを指定した場合、選択したリビジョンの祖先ではない現在のブランチのすべてがトリミングされます。これは、コマンドgit reset --hard HEAD
を発行したときの動作に最も近いようです。
$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
Gitから、コマンド:
git reset --hard # reset to last commit
git clean -df # delete untracked files
等しい
hg update --clean # reset to last commit
hg purge # delete untracked files