web-dev-qa-db-ja.com

git reset --hard HEAD Mercurialでどのようにリセットしますか?

私はMercurialを使用しようとしているGitユーザーです。

起こったことは次のとおりです:hg backout元に戻したいチェンジセットで。これにより新しいヘッドが作成されたため、hgからマージするように指示されました(「デフォルト」に戻ると思われます)。マージ後、まだコミットする必要があることがわかりました。それから、マージの競合を解決するときに間違ったことに気づき、hg backout、つまり、このコミットされていないマージを削除する必要があります。 Gitでは、このコミットされていないものがインデックスに含まれるので、git reset --hard HEADそれを一掃しますが、私が読んだものから、インデックスはMercurialに存在しません。それでは、どうすればこれを取り消すことができますか?

70
hsribei

まだコミットしておらず、まだ行っていないように思える場合は、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")

87
Ry4an Brase

これは近いです:

hg update --clean

21
sblom

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)"
11
binki

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
8