Если откат и повторная фиксация невозможны, или вы уже отправили свои изменения вверх по течению, поэтому расширение 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».