2014-02-15 2 views
0

Недавно я позволил среде IDE заменить тривиальный текст во всем проекте и признал эту ошибку только после внесения других изменений в Mercurial. Я впал в панику и (зная очень мало о Меркуриале, теперь, прочитав the definitive guide, начинающий лучше узнать) попытался каждую команду, которая, казалось, заставляла мою ошибку «уходить». Само собой разумеется, что это был шаг, которым я не горжусь.Mercurial - почему я не могу найти удаленные файлы?

Из-за вещей, которые я помню, было сделано hg update tip и hg rollback. Поскольку я использую Mercurial только на своей локальной машине и не вытаскиваю или не выталкиваю из какого-либо другого репозитория, я думаю, что эти команды не вызывали моей главной проблемы: сейчас осталось много файлов, то есть файлы, которые я позволяю IDE делать неправильные замены в.

Что меня беспокоит, так это то, что я сделал hg status --change REV до find all files changed in a revision, и удаленные файлы там не отображаются.

У PHPStorm есть локальная история, которая показывает, какие файлы отсутствуют. Это (? Только что) позволяет мне hunt down the individual files and revert to their last known revision:

hg log -l 1 path/to/foo.txt 
hg revert -r <my revision> path/to/foo.txt 

... но это слишком много времени для сотен файлов, которые были изменены. Пожалуйста, скажи мне, что есть лучший способ. История PHPStorm хороша и может также восстановить файлы, но она восстановит их до такой степени, что они были ошибочно изменены.

Ваша помощь очень признательна, и я клянусь узнать, что & ценит Mercurial как нечто большее, чем просто пункт контекстного меню, начинающийся сегодня.

ответ

1

Если вы готовы потерять изменения, совершенные с ошибкой или после нее, вы можете вернуться к пересмотру непосредственно перед ошибкой и начать работу оттуда. Используйте hg log, чтобы узнать, какая версия вам нужна, и hg update --rev XX, чтобы перейти к этой ревизии. Если вы не уверены, какую версию вы хотите, обновите до различных версий и посмотрите.

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

Возможно, вы даже сможете вернуть правильные коммиты, которые произошли после того, как вы совершили ошибку до версии, на которую вы вернулись. На старой ветке определите ревизию после ошибки и выполните разницу между этой ревизией и концом этой ветви. Затем посмотрите, можете ли вы применить diff как патч в своей новой ветке. Тем не менее вы все равно потеряете любые изменения, которые были в том же фиксации, что и ошибка.

+0

Могу ли я использовать 'hg log -r' или любую другую команду для поиска удаленных файлов одновременно? Потому что я управлял этой командой для совершения этой роковой ночи, и они просто не отображаются в Mercurial. Тем не менее, 'hg log FILE' будет работать и показывать последнюю версию этого файла, но это слишком много, чтобы найти все файлы. – PeerBr

+0

Я думаю, что может помочь «hg status -change». Подробности в этом ответе: –

+0

http://stackoverflow.com/questions/3789442/mercurial-all-files-that-changed-in-a-changeset –

Смежные вопросы