2015-10-23 8 views
-1

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

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

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

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

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

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

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

Спасибо.

+0

Это поведение не соответствует тому, что по умолчанию используется ртутью и, как правило, не воспроизводится. Вы должны предоставить тестовый пример, который фактически демонстрирует заявленное поведение. 'graft' копирует только набор изменений и не копирует информацию, которая не входит в состав этого очень измененного набора: https://paste.openttdcoop.org/pdpucmoml – planetmaker

+0

@planetmaker Да, я понимаю, что это не поведение по умолчанию, и когда Я попытался повторить тот же процесс снова, его нельзя воспроизвести. Следовательно, я не могу даже продемонстрировать объясненное поведение :( –

+0

Возможно, вы сделали слияние не так, сообщив инструменту слияния, чтобы в основном хранить вещи с «неправильной» стороны? – planetmaker

ответ

0

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

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

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

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