Как отменить изменения метаданных коммита в Mercurial?

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

Но неожиданно было много изменений набора изменений уровня метаданных, которые произошли с этой проверкой. Разрабатывать,

  • Несколько файлов, которые присутствовали только в моей ветке разработки, а не в ветке по умолчанию, были помечены как удаленные по умолчанию.
  • Несколько дополнительных строк в определенных файлах, которые присутствовали только в моей ветви разработки, но не в ветви по умолчанию, были помечены как удаленные по умолчанию.

Mercurial пометил некоторые файлы и строки, которые на самом деле отсутствуют по умолчанию, как удаленные файлы и строки в ветви по умолчанию.

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

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

Есть ли способ отменить изменения уровня метаданных, которые произошли нежелательно? Любая помощь высоко ценится.

Благодарю.

1 ответ

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

Если у коммита есть потомки, вы можете использовать hg histedit (требуется расширение histedit), чтобы удалить наборы изменений, которые вы не хотите сохранять.

Оба эти решения включают в себя историю редактирования, что рискованно, если вы публично распространили плохой коммит. Вы должны будете координировать свою деятельность со всеми, кто мог получить плохой коммит или с любым из его потомков, что не всегда возможно (например, в среде с открытым исходным кодом). Вам также нужно будет повторить эти изменения на стороне сервера, так как Mercurial push --force не похож на Git's push --force,

Если вы не хотите редактировать историю, вы можете привить потомков плохого коммита к последнему известному хорошему предку (например, hg up good_ancestor; hg graft 'bad_commit:: - bad_commit'), тогда делай hg commit --close-branch на плохую голову (ы). Обязательно оставьте информативное сообщение о коммите в коммите с закрытой веткой, чтобы другие разработчики знали, где перебазировать все, что происходит от плохого коммита.

Другие вопросы по тегам