作業ディレクトリにいくつかの変更を加え、誤っていくつかのファイル(変更されたファイルの一部を含む)に削除のマークを付けたとします。行った変更を失わずに、ファイルのマークを外して削除するにはどうすればよいですか?
ファイルをhg add
してください。
なぜ作業ディレクトリを変更するいくつかの回答が得られるのかわかりません。誤って削除するファイルをマークしてしまった場合は、追加で元に戻すことができます。
ry4an@four:~/hgtest$ hg status --all
M another_file
C a_file
ry4an@four:~/hgtest$ hg remove --after --force *
ry4an@four:~/hgtest$ hg status --all
R a_file
R another_file
ry4an@four:~/hgtest$ hg add *
ry4an@four:~/hgtest$ hg status --all
M another_file
C a_file
とはいえ、--force
をhg remove
と一緒に使用しないでください。また、hg forget
の代わりにhg remove --after
を使用する習慣を身に付けてください。
hg revert を使用する2つのオプションがあります。
hg revert -a
前のリビジョンに戻り、すべての変更を新しいファイルに追加し、名前に.origを追加します
hg revert [削除しないファイルの名前]は、それらのファイルを元に戻すだけです
私はおそらく後者に行きます
hg revert
Mercurialはデフォルトで変更のバックアップさえ作成していると思います。
ファイルが存在する場合(hg forget
で削除するようにマークした場合、またはhg remove
dで変更した場合)、hg add [file]
を実行して、変更を加えて元に戻します最後のコミット後、ファイルを忘れる前に作成されます。
ファイルが存在しない場合(ファイルが変更されておらず、hg remove
を使用してファイルに削除のマークを付けている場合)、hg revert [file]
を実行して、作業ディレクトリの親の状態に戻します。 。
私はまったく同じ問題を抱えていました。 hg add
はhg forget
の逆です(ちょうど反対のことが当てはまります)。ただし、ディレクトリ自体を再度追加しようとしても機能しませんでした。代わりに、各ファイルでhg add
を使用する必要がありました。
hg st | egrep "^R" | sed -e "s/R //" | xargs hg add
お役に立てば幸いです。私の場合、合法的に削除したくなかった点に注意してください。削除したいファイルがある場合は、それに応じてgrepを調整してください。
Jkへのコメントに従って、hg forget
を確認しました。これはhg remove -Af
の単なるショートカットのようです。つまり、これはhg add
の正反対です。
その後、hg remove -Af
を使用したことがある場合は、hg add
を使用して元に戻すことができるはずです(試してみたところ、動作するようです)。
マーカーは.hg/dirstateファイルに保存されます。 hg remove -Af
を発行する前に、取得するために必要なすべてのことを行います。次のようになります(テストされていません)。
hg clone bad-repo orig-repo
cp orig-repo/.hg/dirstate bad-repo/.hg/dirstate
cd bad-repo
hg status
最後のコマンドは、ファイルを削除する前の状態を表示する必要があります。