Как раздавить ртутные ревизии с несколькими потомками - PullRequest
2 голосов
/ 25 марта 2019

Я пытаюсь очистить некоторую локальную (черновую) историю ртути перед тем, как отправлять ее в наш главный репозиторий. Один шаг, который я хотел бы сделать, - это сдвинуть / свернуть набор изменений «Fixup» в его родителя. Моя история выглядит так:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

Когда закончите, это должно выглядеть так:

o  [draft] 13 X
|
| o  [draft] 12 Y
|/
o  [draft] 11 Thing to Fix with Fixup
|
o  [draft] 10 Z
|
~

Очевидно, что объединение двух коммитов не должно создавать никаких конфликтов, так как код потомков остается нетронутым. Тем не менее, я не могу найти способ заставить histedit позволить мне редактировать это далеко назад в моей истории, так как он должен редактировать «Набор изменений вместе со всеми его потомками».

Возможно ли это редактирование? Как это должно быть сделано?

1 Ответ

2 голосов
/ 26 марта 2019

Это, конечно, возможно .Я не знаю, как это сделать легко , хотя.

Хитрость заключается в том, чтобы превратить это:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

в:

o   [draft] 16 Fixup
|
o   [draft] 15 Thing to Fix
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

, где 15 - копия 11, а 16 - копия 12. (Для этого используйте hg graft.) Теперь вы можете использовать hg histedit, чтобы объединить эти два.

Теперь легко копировать13 и 14 поверх нового 15, который заменил старые 15-и-16:

o  [draft] 17 X
|
| o   [draft] 16 Y
|/
o   [draft] 15 Thing to Fix with Fixup
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

Теперь вы можете hg strip -r 11 удалить 11, 12, 13 и 14, оставив только исправленные коммиты.(Обратите внимание, что вы можете использовать rebase, чтобы немного упростить это. Длинная форма в основном для иллюстрации и простоты понимания.)

...