Как исправить ошибку в комментарии Mercurial ревизии? - PullRequest
6 голосов
/ 12 апреля 2010

Есть ли способ переписать сообщение hg commit, если была введена неверная информация? Мы всегда включаем наш идентификатор ошибки, когда мы фиксируем набор изменений. Например:

hg commit -m "Bug 14585: LastName field should be mandatory"

Но если я введу неправильный идентификатор ошибки, есть ли способ (возможно, с помощью расширения) исправить комментарий после того, как набор изменений был зафиксирован и отправлен в центральное хранилище?

Ответы [ 5 ]

4 голосов
/ 12 апреля 2010

Если вы еще ничего не сделали для своего хранилища, вы можете выполнить "откат hg" и просто повторно зафиксировать.

3 голосов
/ 12 апреля 2010

Расширение histedit может быть тем, что вы ищете. Это позволяет вам редактировать коммит сообщения после факта. Он также позволяет вам сбрасывать или складывать ревизии, так же как git rebase --interactive.

Обратите внимание, что вы должны включить и использовать расширение в репо, которое вы хотите исправить; нет возможности редактировать историю удаленного репо. Кроме того, я бы очень осторожно использовал это в центральном репо. Как отмечает Тим ​​Пост, изменения в Mercurial не должны изменяться.

2 голосов
/ 14 апреля 2010

Если откат и повторная фиксация невозможны, или вы уже отправили свои изменения вверх по течению, поэтому расширение histedit *1002* само по себе не поможет, тогда Mercurials неизменная история вызовет у вас проблемы. Что бы вы ни делали, у вас останутся висячие ветки, которые явно отравлены нежелательные наборы изменений могут быть повторно введены в ваш репозиторий в любое время.

Исправление ошибок

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

Я использовал оба этих метода в прошлом.

Исправить веткой-родителем и исключить / удалить старую

Если это всего лишь несколько наборов изменений, и вы по какой-то причине не можете использовать расширение hitsedit, вы можете экспортировать эти наборы изменений как патчи и повторно применить их к родительскому. Для первого набора изменений (тот, чью историю вы хотите изменить) вам нужно будет использовать hg patch --no-commit, а затем hg commit с новым сообщением. Затем для остальных просто используйте hg patch, чтобы импортировать изменения и зафиксировать сообщение как есть.

Проблема этого метода заключается в том, что в итоге вы получите две ветви, одну из которых вам нужно будет игнорировать навсегда (я бы обновил до неисправного набора изменений и пометил ветку как устаревшую, прежде чем переключиться обратно на фиксированную ветку). 1022 *

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

Исправить дочернюю ветку и объединить в последующих изменениях

Если набор изменений уже распространился слишком далеко, вы можете попробовать выполнить обновление до уязвимой ревизии, принудительно применяя фиктивную фиксацию, и в этом сообщении о фиксации объясните, что не так с предыдущим сообщением о фиксации. Затем этот набор изменений можно объединить с вашим текущим ответвлением, чтобы обновить все.

Например, если неправильное сообщение было «Closes # 5234» и должно было быть «Closes # 5324», тогда дочернее сообщение могло бы быть «Uncloses # 5234, Closes # 5324».

2 голосов
/ 13 апреля 2010

Я нашел способ исправить сообщение коммита ЕСЛИ неправильная ревизия все еще остается версией репо.

Предположим, что в changeset 24 неверный комментарий. Также предположим, что file1.txt участвовал в этом наборе изменений. Вы можете зафиксировать фальшивое изменение в file1.txt, а затем свернуть фальшивый набор изменений с неверным набором изменений и предоставить новое сообщение.

cd centralrepo
echo  >> file.txt
hg commit -m "fake commit"

hg collapse 24:25 -m "Bug 14555: LastName field should be mandatory"

Это взлом, но он выполняет свою работу и не оставляет следов исправления. Вероятно, было бы не сложно создать расширение для этого и превратить его в простое в использовании решение.

1 голос
/ 12 апреля 2010

Изменения в Mercurial сознательно неизменны . Если вы сделали это с тех пор, нет, вы не можете изменить файлы этой ревизии. Тем не менее, есть руководство по редактированию истории , но примите очень, очень очень все усилия, чтобы не испортить репо в процессе.

Кажется, вы просто хотите отредактировать сообщение о коммите, что вы можете сделать.

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