Есть много сценариев, где вы можете сделать это, я сделаю каждый сценарий заголовком, чтобы вы могли найти сценарий, который соответствует вашему случаю.Обратите внимание, что я все еще изучаю Mercurial, и я хотел бы получить указатели, если что-то, что я говорю, неверно, с использованием неправильной терминологии, может быть сделано лучше и т. Д.
Никаких дальнейших изменений, объединение не передается (нет нажатий/ тянет)
Программист слился, но больше ничего не сделал, и не поделился изменениями с кем-либо, каким-либо образом
В этом случае, просто отбросьте локальный клон и получите свежий клон из безопасного репозитория.
Локальные изменения в верхней части слияния, не используются совместно
Программист слился и продолжил работать на основена этом слиянии.Наборы изменений, которые последовали за объединением, должны быть сохранены, но само объединение должно быть удалено.Изменения (слияние + последующие наборы изменений) не были переданы кому-либо
В этом случае я бы сделал одно из четырех:
- Попробуйте использовать расширение REBASE, этопереместит наборы изменений из одного места в другое.Если наборы изменений основаны на изменениях кода, которые были введены в результате слияния, для согласования различий необходимо выполнить некоторую ручную работу.
- Попробуйте использовать расширение MQ для извлечения наборов изменений, которые должны быть сохранены вОчередь патчей, затем верните их в другое место.Это, однако, будет иметь ту же проблему, что и расширение REBASE, с точки зрения изменений на основе слияния
- Попробуйте использовать расширение TRANSPLANT для «копирования» изменений из одного местоположения в другое.Тем не менее, существует та же проблема, что и с первыми двумя.
- Выполните работу еще раз, возможно, с помощью инструмента сравнения, чтобы внести изменения, внесенные в наборы изменений, которые я хочу отменить, и повторно сделать их в правильномlocation.
Чтобы избавиться от набора изменений слияния + всех следующих наборов изменений, есть пара опций:
Используйте команду strip в расширении MQ
hg strip <hash of merge changeset>
Клонировать и вытягивать и указывать хэш наборов изменений, ведущих к, но не включая объединение.По сути, создайте новый клон, вытянув поврежденный клон в новый, и избегайте затягивания слияния, которое вам не нужно.
hg clone damaged -r <hash of first parent> .
hg pull damaged -r <hash of second parent>
Слияние, переданное другим,контроль над клонами
Программист выдвинул мастер-репозиторий, или кому-то другому, или кто-то вытащил из репозитория программистов.Тем не менее, вы (как и в группе разработчиков) имеете контроль над всеми репозиториями, например, вы можете связаться и поговорить со всеми до того, как будет проделана дополнительная работа
В этом случае я бы посмотрел,шаг 1 или 2 может быть выполнен, но, возможно, он должен быть выполнен во многих местах, так что это может потребовать много работы.
Если бы никто не делал работу на основе набора изменений слияния, я бы использовалшаг 1 или 2 для очистки, затем нажмите на главный репозиторий и попросите всех получить свежий клон из главного репозитория.
При слиянии нажата, у вас нет контроля над клонами
Программист нажал на mergeset, и вы не знаете, у кого будет набор изменений.Другими словами, если вам удастся уничтожить его из вашего хранилища, случайный толчок кого-то, у кого он еще есть, вернет его.
Игнорируйте набор изменений слияния и работайте вдве ветви, как будто этого никогда не было.Это оставит висящую голову.Затем вы можете позже, когда вы объединили две ветви, выполните нулевое слияние для этой головы, чтобы избавиться от нее.
M <-- this is the one you want to disregard
/ \
* *
| |
* *
| |
Просто продолжайте работать в двух ветвях:
| |
* *
| M | <-- this is the one you want to disregard
|/ \|
* *
| |
* *
| |
Затем вы объединяете два, реальное слияние, которое вы хотите:
m
/ \
* *
| |
* *
| M | <-- this is the one you want to disregard
|/ \|
* *
| |
* *
| |
Затем вы можете сделать ноль-слияние, чтобы избавиться от свисающей головы.К сожалению, я не знаю, как это сделать, кроме как через TortoiseHg.У него есть флажок, где я могу отменить изменения в одной из веток.
С помощью TortoiseHg я бы обновился до слияния, которое я хочу сохранить (самый верхний, нижний регистр m), затем выбрал и щелкнул правой кнопкой мыши на свисающей головке слияния ниже, а затем установил флажок «Отменить все изменения от цели слияния (другое»). ) редакция ":