Mercurialをどのように使用しているかを詳しく知ることなく、何が起こっているかを推測することしかできません。あなたの主な質問は、なぜMercurialにコミットされていない変更を無視させる簡単な方法がないのか、そして次に、マージの前に変更をコミットしなければならないのかということです。
最初に2番目の質問に答えて、2つのチェンジセット間でマージを実行すると、それらのチェンジセットが新しいマージされたチェンジセットの親になります。このため、作業ディレクトリに既存の(コミットされていない)変更がないようにする必要があります(「クリーン」である必要があります)。別のチェンジセットを「ダーティ」な作業ディレクトリにマージしようとした後、コミットするのではなくそのマージを元に戻すことにした場合、Mercurialは作業ディレクトリをどの状態に戻すかを知りません。変更が加えられたファイルのマージを無視するようにMercurialに指示できないのはなぜですか?Mercurialはファイルごとに機能しないため、「チェンジセット」ベースで機能します。この場合、単一のチェンジセットがその時点で追跡されているすべてのファイルの状態を保持します(Subversionのようなものとは異なります。
マージ時にローカルの変更を失う予定の場合は、最初にローカルの変更を削除する必要があります。これは、Mercurialのヘルプに従って、クリーンな更新を実行することで実行できます。hg update --clean .
最初の質問として、リポジトリに保存したくないものを無視する非常に簡単な方法があります。それは、ファイルを使用して.hgignore
それらのファイルを指定することです。あなたは、ほとんどの人が「コミットしたくない設定ファイルをたくさん持っている」と言っています。これはまさに.hgignore
ファイルの目的です。Mercurialはこれらのファイルを無視し、(明示的に追加しない限り)コミットされることはありません。したがって、それらを変更した場合でも、Mercurialによって無視され、すべてが見事に機能します。これに対する注意点は、ファイルがリポジトリによってすでに追跡されている場合、それを無視するには遅すぎるということです。
行った変更をコミットする前に本当にマージする必要があると判断した場合(MQおよびShelve拡張機能が頭に浮かぶ)、解決策はありますが、それでも、行った変更にマージするという潜在的な問題があります。新しい作業ディレクトリに移動します。つまり、1つだけではなく、2つのマージを実行する必要があります。
あなたの最後の質問は「私がここに来ていないのは何ですか?」です。厳しく聞こえたくはありませんが、あなたの質問は、Mercurialをどのように構成して使用するかを「理解していない」ことを示唆しています。などの機能を読むのに時間を費やす必要があります.hgignore
。おそらく、他の人がMercurialをどのように使用しているか、およびそのワークフローを(ここでもSOで)見て回る必要があります。決定的なガイドは見るのに良い場所であり、マージ(Ch2)、ファイル無視(Ch7)などのことをカバーしています。ベテランのMercurialユーザーにとっても良い読み物です。
それがお役に立てば幸いです。