Как редактировать сообщение Mercurial после ветвления? - PullRequest
8 голосов
/ 17 ноября 2011

У меня есть несколько старых сообщений коммитов в репозитории Mercurial, которые нужно изменить (чтобы приспособиться к некоторым новым инструментам). Я уже понимаю, что этот взлом должен выполняться в главном репозитории, и все локальные репозитории должны быть повторно клонированы, поскольку контрольные суммы всех последующих наборов изменений также будут меняться.

Я пытался следовать рецептам в " Как редактировать некорректные сообщения коммита в Mercurial? ", но с расширением MQ я застрял в сообщении об ошибке

X:\project>hg qimport -r 2:tip
abort: revision 2 is the root of more than one branch

и с Histedit совсем так же

X:\project>hg histedit 2
abort: cannot edit history that would orphan nodes

Кажется, проблема в том, что после набора изменений были созданы ветви.

Я вижу, как это может стать грязным, если я захочу изменить содержимое патча, но, возможно, есть обходной путь, который я пропустил при редактировании сообщения фиксации?

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Я бы использовал взломанную версию конверта расширения , чтобы сделать это.Расширение может выполнять преобразования hg → hg , что позволяет изменять имена авторов и ветвей.Пока не поддерживается изменение сообщений коммита, но вы можете взломать его.

В частности, вы должны изменить метод getcommit с:

def getcommit(self, rev):
    ctx = self.changectx(rev)
    parents = [p.hex() for p in self.parents(ctx)]
    if self.saverev:
        crev = rev
    else:
        crev = None
    return commit(author=ctx.user(), date=util.datestr(ctx.date()),
                  desc=ctx.description(), rev=crev, parents=parents,
                  branch=ctx.branch(), extra=ctx.extra(),
                  sortkey=ctx.rev())

, который отвечаетдля чтения старых коммитов.Измените

desc=ctx.description()

на

desc=adjust(ctx.description())

, а затем реализуйте функцию adjust в верхней части файла:

def adjust(text):
    return text.upper()
2 голосов
/ 30 августа 2013

Если это случайные / дублирующиеся ветви из-за использования --amend и push --force, то сначала удалите их и попробуйте «histedit» снова, а затем сотрите центральное хранилище на битбакете; попробуйте следующее, которое у меня сработало:

Проверяя журнал репозитория и ищите ответвления, вы можете использовать GraphlogExtension , который вам нужно будет сначала включить:

# hg log -G | more
...
o  changeset:   43:c2fcca731aa5
|  parent:      41:59669b9dfa4a
|  user:        Daniel Sokolowski (https://webdesign.danols.com)
|  date:        Tue Aug 27 20:14:38 2013 -0400
|  summary:     Progress snapshot: major content text and model instance  ..
...
| o  changeset:   42:c50724a6f1c6 
|/   user:        Daniel Sokolowski (https://webdesign.danols.com)
|    date:        Tue Aug 27 20:14:38 2013 -0400
|    summary:     Progress snapshot: major content text and model instance ...
|
o  changeset:   41:59669b9dfa4a
|  user:        Daniel Sokolowski (https://webdesign.danols.com)
...

Включите MqExtension и удалите все ветви.

# hg strip --no-backup 42:c50724a6f1c6
# hg strip --no-backup 45:3420dja12jsa
...

При необходимости измените коммит на 'draft' (см. Phases ) и повторно запустите "histedit", и теперь все должно быть хорошо.

# hg histedit 14:599dfa4a669b
abort: cannot edit immutable changeset: b7cfa2f28bde
# hg phase -f -d 14:599dfa4a669b
# hg hsitedit 14:599dfa4a669ba
0 голосов
/ 18 августа 2013

Мне нужно что-то подобное, поэтому я подал запрос функции .

...