Используя Mercurial (Hg), после проверки в Rev 100, 101 и 102, нужно ли нам откатывать их по очереди? - PullRequest
1 голос
/ 06 января 2011

После приведения кода к простейшей форме, например, ревизии 100, 101, а затем 102, когда проблема обнаружена, можно ли сделать

hg backout -r 100

, чтобы отменить все изменения?Или нам нужно отступить на 102, 101, а затем на 100 (т. Е. Один за другим)?

Ответы [ 6 ]

2 голосов
/ 07 января 2011

Ваша команда не будет делать то, что вы хотите - возврат выполняет только один набор изменений.

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

Самый быстрый способ будет выглядеть так:

hg diff -r 102 -r 99 | hg import --no-commit -

, который говорит: «Возьмите разницу между 102 и 99 (обратите внимание на обратный порядок) и примените ее в качестве патча.После этого вы должны проверить рабочий каталог и, если хотите, сделать hg commit --addremove.

Недостатком является то, что ваш график истории будет выглядеть так:

--[99]---[100]---[101]---[102]---[103]

Где 103является отрицательным значением комбинированного изменения 100, 101 и 102. Это не показывает, что на самом деле произошло.

Лучше было бы hg update 99 сделать коммит, любой коммит, так что теперь ваша история выглядит так:

--[99]---[100]---[101]---[102]
     \
      [103]---

, а затем выполните hg --config ui.merge=internal:local merge 102, который объединяет 102 в 103, но не принимает никаких изменений из 100, 101, 102.

Это сделает вашу историю похожей на:

--[99]---[100]---[101]---[102]
     \                       \
      [103]-------------------[104]

который мне понятнееговорит, что случилось.Однако любой из них работает.

Или, возможно, вы могли бы просто сделать:

hg backout 102
hg backout 101
hg backout 100

, который делает вашу историю:

--[99]---[100]---[101]---[102]---[103]---[104]---[105]

Где 103, 104 и 105, гдеинверсии 102, 101 и 100 соответственно, но это просто глупо.

1 голос
/ 08 января 2011

Предполагая, что вы больше не хотите ничего из оборотов 100, 101 или 102, аналогичный ответ на второе предложение Ry4an следующий:

  • Из подсказки, используйте hg commit --close-branch - это удаляет ветку из списка глав и говорит миру, по сути, я больше не буду развиваться поверх этого. (Это соответствует коммиту 103 на графике ниже)
  • Обновление до последней удачной ревизии (hg update 99), продолжение работы в обычном режиме и выполнение новых коммитов (коммит 104, 105 на графике ниже)

Результирующий график выглядит как:

--[99]---[100]---[101]---[102]---[103]---X
     \                       
      [104]---[105]---...

Тонкое различие заключается в том, что нет "поддельного слияния" (где вы принимаете только изменения от одного из родителей).

0 голосов
/ 11 января 2011

Вы действительно хотите вернуть плохих наборов изменений, чтобы продолжить работу с набором изменений 99, но вы видите 100 - 102 в истории?

Или вы хотите полностью избавиться от них (чтобы они даже исчезли из истории)?
Если да, вы можете просто клонировать репозиторий, но исключить неправильные наборы изменений:

Mercurial: исправить историю с пробой

0 голосов
/ 06 января 2011

Один из подходов - hg up -r mygoodandawesomerev, затем фиксируйте это, создавая, по сути, неназванную ветвь, развевающуюся на ветру.

0 голосов
/ 06 января 2011

С http://hgbook.red -bean.com / read / Find-and-Fixing-errors.html :

Команда hg backout принимает один идентификатор ревизии в качестве аргумента;это набор изменений, чтобы отступить.

alt text

По крайней мере из вышеприведенной информации требуется только один набор изменений для возврата.

0 голосов
/ 06 января 2011

Вам необходимо откатить их по отдельности, так как откат удаляет только те изменения, которые вы отменили.

См

http://hgbook.red -bean.com / чтение / выяснение и фиксирующих-mistakes.html

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