この回答は、コミットをパッチに降格する方法を示していますが、mq パッチをローカルの変更のみに変換するにはどうすればよいですか?
2 に答える
簡潔な答え
パッチが適用されていることを確認してから、次のようにします。
hg qrefresh nothing
hg qpop --keep-changes
hg qdelete "Name of patch"
長い答え
まず、パッチによって追跡される変更がないことを確認する必要があります。そのためには、
hg qrefresh nothing
nothing
リポジトリにない単なるランダムなファイル名です。私は通常hg qref 0
、簡潔にするために使用します。hg qrefresh
オプションのファイル パターンを受け入れます。それが与えられた場合、パッチはパターンに一致する変更を追跡します - そしてそれらだけです。ファイル パターンに一致するものがない場合、パッチによって変更が追跡されないため、ローカルの変更のみが行われます。
今、役に立たないパッチが横たわっていて、いくつかのローカルな変更があります。クリーンアップするには、次のことができます
hg qpop --keep-changes
ローカルの変更があってもパッチをポップします。最後に、無効で空で適用されていないパッチを削除するには、使用できます
hg qrm "Name of patch"
適用されたパッチは削除できないため、このhg qpop --keep-changes
手順が必要です。
(注:hg qrm
とhg qremove
は のエイリアスですhg qdelete
。)
TortoiseHg を使用している場合
TortoiseHg で、パッチをクリップボードにエクスポート (ワークベンチ > パッチを右クリック > エクスポート > パッチのコピー) してから、パッチの適用を解除し、最後に "作業ディレクトリ" を宛先としてクリップボードからインポートするとうまくいくようです。この手順を示すスクリーン キャプチャを次に示します。
間違いなくより単純な代替案:
hg qfinish qtip
hg strip -k tip
つまり、パッチを終了してから、その変更を保持したまま結果のコミットを削除します (-k
へのオプションstrip
)。