web-dev-qa-db-ja.com

Mercurialで削除アクションを元に戻す

作業ディレクトリにいくつかの変更を加え、誤っていくつかのファイル(変更されたファイルの一部を含む)に削除のマークを付けたとします。行った変更を失わずに、ファイルのマークを外して削除するにはどうすればよいですか?

41
Kostas

ファイルを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

とはいえ、--forcehg removeと一緒に使用しないでください。また、hg forgetの代わりにhg remove --afterを使用する習慣を身に付けてください。

39
Ry4an Brase

hg revert を使用する2つのオプションがあります。

hg revert -a

前のリビジョンに戻り、すべての変更を新しいファイルに追加し、名前に.origを追加します

hg revert [削除しないファイルの名前]は、それらのファイルを元に戻すだけです

私はおそらく後者に行きます

23
jk.

hg revert

Mercurialはデフォルトで変更のバックアップさえ作成していると思います。

16
pestilence669

ファイルが存在する場合(hg forgetで削除するようにマークした場合、またはhg removedで変更した場合)、hg add [file]を実行して、変更を加えて元に戻します最後のコミット後、ファイルを忘れる前に作成されます。

ファイルが存在しない場合(ファイルが変更されておらず、hg removeを使用してファイルに削除のマークを付けている場合)、hg revert [file]を実行して、作業ディレクトリの親の状態に戻します。 。

6
dinosaur

私はまったく同じ問題を抱えていました。 hg addhg forgetの逆です(ちょうど反対のことが当てはまります)。ただし、ディレクトリ自体を再度追加しようとしても機能しませんでした。代わりに、各ファイルでhg addを使用する必要がありました。

hg st | egrep "^R" | sed -e "s/R //" | xargs hg add

お役に立てば幸いです。私の場合、合法的に削除したくなかった点に注意してください。削除したいファイルがある場合は、それに応じてgrepを調整してください。

4
Nick White

Jkへのコメントに従って、hg forgetを確認しました。これはhg remove -Afの単なるショートカットのようです。つまり、これはhg addの正反対です。

その後、hg remove -Afを使用したことがある場合は、hg addを使用して元に戻すことができるはずです(試してみたところ、動作するようです)。

3

マーカーは.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

最後のコマンドは、ファイルを削除する前の状態を表示する必要があります。

2
hegemon