Как отменить изменения метаданных коммита в 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
на плохую голову (ы). Обязательно оставьте информативное сообщение о коммите в коммите с закрытой веткой, чтобы другие разработчики знали, где перебазировать все, что происходит от плохого коммита.