5

私はhg pullhg update変更をコミットしていないフォルダーに対して行いました。いくつかのファイルに対して 3 者間比較/マージ ツールを開きましたが、変更がリポジトリにあったものよりも古いか新しいかを覚えていなかったので、それらをすべて閉じました。これにより、ファイルが競合したままになると思いました。 、SVNで行うように..しかし、いいえ、すべてのファイルがマージされました:

ブランチのデフォルトへの更新
25 個のファイルが更新され、0 個のファイルがマージされ、0 個のファイルが削除され、0 個のファイルが未解決です

残念ながら、このマージでは 2 つのバージョンが混在し、機能しませんでした。

したがって、私の質問は、マージを元に戻し、呼び出す前のローカル ファイルを (コミットされていない変更と共に) 戻す方法があるhg updateかどうかです。

(私はこの投稿を見つけました、あるコメント投稿者が示唆しhg resolve --tool internal:localていますが、私の場合は何もしていないようです。)

ありがとう。

4

1 に答える 1

7

難しい方法であることがわかったように、Mercurial は更新時に作業コピーの変更をターゲット リビジョンにマージします。

マージが (Mercurial の観点から) クリーンである場合、影響を受けたファイルは「解決済み」としてマークされます。これは次の方法で確認できます

$ hg resolve --list

Rfor が解決された一連のファイルが表示されます。未解決のファイルは でリストされUます。ファイルで機能する前hg resolveに、最初に未解決としてマークする必要があります。

$ hg resolve --unmark your-file

これは、2 つのコミットでコミットを作成する完全なセッションです。

$ hg init
$ echo x > x
$ hg commit -A -m x
adding x
$ echo xx >> x
$ hg commit -m xx

次に、最初のコミット (ファイルに が含まれている場所x) に更新し、次のように変更しyます。

$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo y > x

2 番目のコミットに更新すると、マージがトリガーされ、成功します。

$ hg up 
merging x
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
$ hg resolve --list
R x
$ cat x
y
xx

ファイルを取り戻す前に、未解決としてマークする必要があります。internal:local次に、ツールを使用して解決できます。

$ hg resolve --unmark x
$ hg resolve --tool internal:local x
$ cat x
y

マージ状態は に保存され.hg/mergeます。そこには、SHA-1 ハッシュによる一連のファイル名があります。Mercurial はディレクトリが不要になったと判断すると削除するため、上記のコマンドを実行する前に、このディレクトリのコピーを作成しておくことをお勧めします。

于 2013-11-14T08:01:56.883 に答える