Ответ 1
Вам нужно правильно переделать ход, явно указав Mercurial, какие файлы были перемещены, а затем объединить сломанные изменения. Таким образом вы восстановите путь истории к исходным файлам.
Шаги, предполагая, что <x>
является пересмотром перемещения, а <y>
- текущая версия главы.
- Обновить до изменения перед перемещением:
hg update <x-1>
- Верните ход, но теперь правильно используя
hg rename
илиhg rename --after
- Фиксировать
- Объединить с исходной версией перемещения (
hg merge <x>
), это не должно иметь конфликтов, но если отбросить все изменения. - Фиксировать
- Объединить с оставшимися наборами изменений после перемещения (если есть) (
hg merge <y>
) - Фиксировать
Вот основной процесс, показанный в командной строке:
$ mkdir move-merge-test
$ cd move-merge-test
$ hg init
$ echo "x" > a
$ hg add a
$ hg commit -m "initial revision"
Неправильно перемещаться:
$ mv a b
$ hg remove a
$ hg add b
$ hg status --copies
A b
R a
$ hg commit -m "incorrect move"
$ hg log --follow b
changeset: 1:b22f3e94133b
tag: tip
user: Laurens Holst <...>
date: Wed Oct 19 14:41:37 2011 +0200
summary: incorrect move
Исправить ход:
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg rename a b
$ hg status --copies
A b
a
R a
$ hg commit -m "correct move"
created new head
$ hg log --follow b
changeset: 2:5deabbcb5480
tag: tip
parent: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:46:35 2011 +0200
summary: correct move
changeset: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:36:35 2011 +0200
summary: initial revision
Объедините его со сломанным движением:
$ hg merge 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "merge with broken move"
$ hg log --follow b
changeset: 3:ce65fc7b35e4
tag: tip
parent: 2:5deabbcb5480
parent: 1:b22f3e94133b
user: Laurens Holst <...>
date: Wed Oct 19 14:47:13 2011 +0200
summary: merge broken branch
changeset: 2:5deabbcb5480
parent: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:46:35 2011 +0200
summary: correct move
changeset: 1:b22f3e94133b
user: Laurens Holst <...>
date: Wed Oct 19 14:41:37 2011 +0200
summary: incorrect move
changeset: 0:b82f89f0c7d9
user: Laurens Holst <...>
date: Wed Oct 19 14:36:35 2011 +0200
summary: initial revision
Как вы можете видеть, в истории теперь отображаются все затронутые изменения. Если файлы перемещаются в несколько коммитов, основной принцип остается таким же, как и слияние, более чем на 1 фиксацию. Если у вас есть какие-либо фиксации после перемещения, я рекомендую объединить их отдельно (шаг 6 в приведенных выше шагах), чтобы избежать ложных конфликтов.