Как зафиксировать ошибку в Подвижном комментарии changeset?

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

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

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

6
задан Sylvain 12 April 2010 в 20:29
поделиться

5 ответов

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

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

3
ответ дан 9 December 2019 в 20:41
поделиться

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

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

1
ответ дан 9 December 2019 в 20:41
поделиться

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

4
ответ дан 9 December 2019 в 20:41
поделиться

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

Предположим, что набор изменений 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"

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

2
ответ дан 9 December 2019 в 20:41
поделиться

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

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

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

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

Исправьте с помощью родственной ветви и удалите / удалите старую

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

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

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

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

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

Например, если неправильным сообщением было «Закрывает # 5234», а должно было быть «Закрывается # 5324», то дочерним сообщением может быть «Открывает # 5234, Закрывает # 5324».

2
ответ дан 9 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: