2014-12-03 3 views
-2

Я только что потерял все изменения в патче Mercurial (к счастью, у меня была резервная копия), и я хотел бы выяснить, что пошло не так.Повреждение исправления или потеря после переустановки

установки параметров

У меня была пара патчей, называть их patch1.diff и patch2.diff. Оба они были основаны на ревизии 123, но затрагивали совершенно разные файлы, без перекрытия. Итак, мой репозиторий смотрел что-то подобное в TortoiseHg (где p является пластырем и r является регулярным пересмотром):

Graph Rev Branch Tags   Message 
    p 125 develop patch2.diff Change to existing file baz.php 

    p 124 develop patch1.diff Add new files foo.php and bar.php 

    r 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

Что я сделал

Я хотел, чтобы изменить порядок пластырей, потому что мой работа над patch2.diff была завершена, и я хотел зафиксировать эти изменения. Так что я попытался перебазирование, что патч на ревизию 123. Это не сработало, и я в конечном итоге с чем-то вроде этого:

Graph Rev Branch Tags   Message 
    r        Working directory - not a head revision! 

    r 126 develop    Change to existing file baz.php 
    | 
    p | 125 develop patch2.diff Change to existing file baz.php 
    | 
    p | 124 develop patch1.diff Add new files foo.php and bar.php 
    | 
    r-+ 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

Это было явно не так. Теперь у меня была ревизия 126 с теми же изменениями, что и в файле patch2.diff, но у меня также был patch2.diff, который не был переустановлен, как я ожидал. Кроме того, я получал сообщение «не пересмотр главы», хотя на самом деле никаких изменений в моем рабочем каталоге не было.

Так я раздел пересмотр 126. В этот момент, все пошло полностью сошли с рельсов, в результате чего мне с этим:

Graph Rev Branch Tags   Message 
    p 125 develop patch2.diff Change to existing file baz.php 

    p 124 develop patch1.diff 

    r 123 develop    Last committed changeset 
    | 
    r 122 develop    Old changes 
    ... 

patch1.diff еще появился в TortoiseHg, но уже не были изменения и коммит. Я попытался hg qpush --all, и получил эти сообщения:

applying patch1.diff 
unable to read patch1.diff 

Я не мог даже найти patch1.diff на моей файловой системе больше. В конечном счете, мне пришлось запустить hg qdelete --keep patch1.diff, а затем восстановить мои потерянные изменения из внешних резервных копий.

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

Вопрос

Что произошло в мире? Почему я потерял patch1.diff? Я мог понять, потерял ли я изменения в patch2.diff, учитывая то, как я использовал hg strip, но я понятия не имею, почему patch1.diff получил нук.

+0

Непонятно, что вы хотите задать с этим вопросом. Опишите конкретную цель, которую вы хотите достичь, пожалуйста, – Gargo

+0

@Gargo, почему нисходящий? Этот вопрос был совершенно ясен: я хотел знать, почему мой патч был удален спонтанно. У этого даже есть ответ, объясняющий проблему. Пожалуйста, пересмотреть ваш downvote. –

ответ

2

Вы столкнулись с проблемами, почему mq может быть очень скоро не рекомендован. Он хочет сохранить контроль над csets, которые он контролирует, и он теряет это, когда вы изменяете историю под контролем mq. Таким образом, mq не работает с rebase, strip, histedit ...

Лучший способ - просто прекратить использование mq вообще. Сделайте свою фазу по умолчанию для новых коммитов (или черновиков). Зафиксируйте свои исправления как обычные изменения - тогда mq не может вмешиваться в правильную работу rebase, и то, что вы пытались сделать, просто сработало бы. рт.ст. перебазироваться -s125 -d123 рт.ст. перебазироваться -s124 -d126 (учитывая состояние вашего репо, как и в первой цитате, просто asusming R124, R125 являются нормальной csets, а не под контролем мэка)

И если вы» вы немного осмеливаетесь, вы смотрите на эволюцию расширения, которое очень полезно для людей, которые поддерживают очереди исправлений в отношении upstream-репозиториев или жонглируют редакционными наборами изменений с помощью соавторов. См. http://www.logilab.org/blogentry/88203 для введения в меркуриальные фазы

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