Вам необходимо правильно повторить перемещение, явно указав Mercurial, какие файлы были перемещены, а затем объедините поврежденные наборы изменений. Таким образом, вы восстановите путь истории к исходным файлам.
Шаги, предполагая, что <x>
- это ревизия хода, а <y>
- текущая ревизия головы.
- Обновление до ревизии перед переездом:
hg update <x-1>
- Повторите ход, но теперь правильно, используя
hg rename
или hg rename --after
- Commit
- Объединить с первоначальной ревизией хода (
hg merge <x>
), в этом случае не должно быть конфликтов, но при отмене всех изменений.
- Commit
- Объединить с остальными наборами изменений после переезда (если есть) (
hg merge <y>
)
- Commit
Вот основной процесс, показанный в командной строке:
$ 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 в шагах выше), чтобы избежать ложных конфликтов.