#mercurial
#mercurial
Вопрос:
Я набрал
$ hg addremove
но позже понял, что некоторые файлы не должны быть частью фиксации. Что я должен был сделать, так это добавить эти файлы в .hgignore и после этого запустить addremove и зафиксировать.
Есть ли способ исправить это?
Ответ №1:
Если вы еще не зарегистрировались, просто используйте hg forget fileToForget
или используйте Tortoise для удаления файлов.
Если вы зафиксировали и не возражаете, чтобы файлы стали частью истории, просто забудьте о них и зафиксируйте снова.
Если вы не хотите, чтобы они были частью истории вашего репозитория, и если их фиксация — самая последняя выполненная вами операция, вы можете попробовать выполнить откат (используйте hg rollback
или перейдите в меню восстановления в Tortoise). Вам придется забыть файл, а затем зафиксировать его снова
Если вы имеете дело со слишком большим количеством файлов, вы можете попытаться автоматизировать задачу, получив список всех добавленных файлов, забыв их, изменив вас .hgignore
и выполнив addremove
это снова.
Пример первого шага в powershell без выполнения коммита
hg status --added --no-status | foreach-object {hg forget $_};
Комментарии:
1. Для типа Linux
hg status --added --no-status | xargs hg forget
.2. Попробуйте это из другого ответа
hg forget "set:added()"
, который сработал для меня.3. @DanielSokolowski Это не сработает, если в именах файлов есть пробелы — используйте
hg status --added --no-status | xargs -d 'n' hg forget
вместо этого.
Ответ №2:
Чтобы отменить удаление, которое вы еще не зафиксировали, просто запустите:
$ hg revert --all
Комментарии:
1. Предполагая, что не было никаких других изменений, кроме эффектов
addremove
.2. Вы правы — я предположил, что ‘addremove’ была единственной командой, которую вы хотите отменить.
3. @Alex Это может быть опасно, как упоминал @Edward. Кто-то, использующий эту команду, потеряет все изменения рабочей области.
hg forget
это правильный способ сделать это. Пожалуйста, посмотрите ответ от @CedricRup