Что если в Mercurial выполнено «hg up -r <previous_revision_number>», а некоторые файлы изменены и зафиксированы случайно? - PullRequest
0 голосов
/ 15 октября 2010

Если просто посмотреть, как ведет себя программа, выполняется

hg up -r 1000

, а текущая версия - 1020.

Затем вносятся некоторые изменения в 2 файла, и случайно эти файлы фиксируются.

Итак, теперь есть изменения, сделанные с версии 1000 до 1020, а также некоторые изменения, которые относятся непосредственно к 1000на 1021 ...

В этом случае, как это должно быть обработано?

По крайней мере, одна возможность может быть

hg backout -r 1021
hg up tip

и внести изменения, как будто ничего не произошло с 1021Есть ли другой вариант сделать hg merge и нужно быть осторожным с тем, как код сливается?(потому что все изменения от 1000 до 1021 связаны с одной и той же функцией и одинаковыми файлами).Или есть что-то еще, кроме этих двух?

Ответы [ 2 ]

5 голосов
/ 15 октября 2010

Просто сделайте слияние.Это не будет больно.

Люди, предлагающие поддержку, все равно оставят вас с несколькими головами.В настоящее время ваша история выглядит следующим образом:

---[1000]---[1001]--....--[1019]--[1020]
      \
       \----[1021]

После возврата 1021 она будет выглядеть следующим образом:

---[1000]---[1001]--....--[1019]--[1020]
      \
       \----[1021]---[1022]

, где 1021 и 1022 будут логически отменять друг друга, но вы все равно будете иметьдве головы.

После слияния у вас будет

---[1000]---[1001]--....--[1019]--[1020]---[1022]
      \                                   /
       \----[1021]-----------------------/

После обновления до 1021 вы можете выполнить 'hg commit --close-branch', что все равно оставит эту головуна месте, но остановит его показ в списках, но объединение - лучший выбор.

Если вы еще нигде не нажали 1021, вы можете оставить его полностью как:

hg clone -r 1020 myrepo trimmedrepo

и тогда у вас будет новое репо, trimmedrepo, в котором есть все до 1020 включительно (но не 1021).

Мне нравится слияние.

3 голосов
/ 15 октября 2010

Вы смотрели на расширение rebase?Он должен хорошо с этим справиться:

hg up 1020
hg rebase -s tip

В результате этого изменения, которые вы случайно внесли в версию 1000, были перенесены в 1020. Я предполагаю, что вы хотите сохранить изменения, и аварияпросто ты сделал их против старой ревизии.Если вы действительно хотите избавиться от изменений, ваш подход к отступлению хорош.Вы также можете использовать команду strip из расширения MQ, чтобы удалить их из истории.И rebase, и strip переписывают вашу локальную историю, делая их неподходящими, если вы передали наборы изменений, которые вы пытаетесь редактировать, в чей-то репозиторий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...