Подтвердить что ты не робот

Отменить действие удаления в Mercurial

Предположим, что я внесли некоторые изменения в рабочий каталог и случайно пометил несколько файлов (включая некоторые измененные) для удаления. Как удалить файлы для удаления без потери внесенных изменений?

4b9b3361

Ответ 1

Просто hg add файлы.

Я не знаю, почему вы получаете несколько ответов, которые изменяют рабочий каталог. Если вы случайно отметили некоторые файлы для удаления, вы можете отменить его с помощью добавления.

[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
[email protected]:~/hgtest$ hg remove --after --force *
[email protected]:~/hgtest$ hg status --all
R a_file
R another_file
[email protected]:~/hgtest$ hg add *
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file

Тем не менее, не используйте --force с hg remove или когда-либо на самом деле. Также попробуйте привыкнуть использовать hg forget вместо hg remove --after,

Ответ 2

есть два варианта, используя hg revert:

hg revert -a

который вернется к предыдущей версии и поместит все ваши изменения в новые файлы с .orig, добавленным к именам

hg вернуть [имена файлов для отмены], чтобы просто вернуть эти файлы

я, вероятно, поеду с последним

Ответ 3

hg revert

Я уверен, что Mercurial даже делает резервные копии ваших изменений по умолчанию.

Ответ 4

Если файл существует (вероятно, если вы отметили его для удаления с помощью hg forget, или если вы его изменили, то hg remove d it), сделайте hg add [file], чтобы добавить его обратно с любыми изменениями, сделанными после последний фиксатор и перед тем, как забыть файл.

Если файл не существует (вероятно, если файл не был изменен и вы отметили файл для удаления с помощью hg remove), сделайте hg revert [file], чтобы вернуть его обратно в свое состояние в родительском каталоге рабочего каталога.

Ответ 5

После вашего комментария к jk, я проверил hg forget. Кажется, это всего лишь ярлык для hg remove -Af, что означает, что это реальная противоположность hg add.

После этого, если вы использовали hg remove -Af, тогда вы должны иметь возможность вернуться, используя hg add (я просто попробовал и, похоже, работал).

Ответ 6

У меня была такая же проблема. hg add является обратным к hg forget (как раз наоборот). Однако попытка повторного добавления самого каталога не работала. Вместо этого мне пришлось использовать hg add для каждого файла:

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

Надеюсь, что это поможет. Обратите внимание, что в моем случае я ничего законного не хотел удалить. Если у вас есть файлы, которые вы обязательно хотите удалить, соответствующим образом скорректируйте grep.

Ответ 7

Маркеры хранятся в файле .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

Последняя команда должна показать статус перед удалением файлов.