Предположим, что я внесли некоторые изменения в рабочий каталог и случайно пометил несколько файлов (включая некоторые измененные) для удаления. Как удалить файлы для удаления без потери внесенных изменений?
Отменить действие удаления в Mercurial
Ответ 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
Последняя команда должна показать статус перед удалением файлов.