1

昨夜、マージを開始しました。そしてそれをコミットするのを忘れました。

後で、作業コピーにいくつかの変更を加えました。

今日、私はそのマージをまったく必要としません (新しいリビジョンでマージするため) が、ローカルの作業中の変更を保持したいと考えています。変更は、マージの解決とは無関係です。

現在のマージを中止している間、ローカルの変更を保持する (および/または後で再適用する) にはどうすればよいですか?


shelveローカル変更での使用は許可されていません:

$ hg shelve foo/bar
abort: cannot shelve while merging

「マージを中止する」通常の方法であるを使用するhg up -Cと、ローカルの変更が排除されます。


これは、作業ディレクトリに影響を与えずに「hg マージ」する方法とは異なりますか? マージがすでに開始されているため、コミットされていません。質問は「コミットなしで中止する」に焦点を当てていますが、最初にコミットを終了してから変更を選択するという回答が適切です。

4

1 に答える 1

3

最も簡単な解決策は、変更を一時的に秘密のコミットに記録してから、そのコミットに戻すことです。たとえば、次のようになります。

hg resolve -m -a                       # mark all files as resolved
hg commit -s -m "Savepoint."           # Temporary commit.
hg update .^                           # Back to original revision.
                                       # (Use ".^" in cmd.exe on Windows.)
hg revert -r tip --all                 # Revert files to saved commit.
hg diff                                # Verify that you've got all the changes.
hg strip -r tip --keep                 # And discard the temporary commit.

ここでは秘密のコミットを使用しているため、削除するのを忘れた場合 (または後で保持する予定がある場合) に誤ってプッシュされません。

evolve 拡張機能を使用している場合は、後で参照する必要がある場合に備えて、一時的なコミットが (非表示に) 保持さhg prune -r tipれるため、 よりも優先されます。hg strip -r tip --keep

于 2016-05-23T13:43:37.713 に答える