Отмена последнего удаления в Mercurial?

#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