Mercurial, упрощающий многоголового монстра - PullRequest
0 голосов
/ 20 октября 2018

Я делюсь онлайн-хранилищем Mercurial с одним коллегой.Пришел в сложную ситуацию:

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

  1. Не могу нажать, у меня теперь несколько голов.К моему ужасу, присвоение одному из них имени в виде именованной ветви ничего не исправит.После некоторого изучения я ответил, закрыв все, кроме головы, которую я действительно хотел.Отличная идея?Плохая идея?

  2. Push создаст новую удаленную головку.Потратив на это более чем достаточно времени, я пошел на push -f.Это сработало.Но я действительно предпочел бы УБЕДИТЬСЯ, что это истинное и законное продолжение головы, которая уже была там.Но НЕ настоящее слияние, полная замена моим новым набором файлов кода.Как?

  3. Отправляясь на Станцию ​​B и делая тягу, я не получаю свою новую, желаемую голову, я получаю оригинальную голову, которую я закрыл, в ее последней реальной версии.Я искал, как сказать команде "тянуть", чтобы получить другую голову.Как я могу это сделать?Как запросить у сервера информацию о том, какие заголовки или ответвления он содержит, чтобы я мог интеллектуально выбрать один?

Дополнительная информация:

Станция Вид: Station A view Станция B вид после тяги: enter image description here

1 Ответ

0 голосов
/ 21 октября 2018

Я вижу ряд проблем:

1) вы пытались использовать клон, чтобы избавиться от проблемы.Когда вы ознакомитесь с Mercurial, вы обнаружите, что есть более эффективные способы решения проблем, которые вы описываете.

В вашем описании неясно, какие шаги вы предприняли с клоном.Например, вы клонировали из основного удаленного репо или из локального репо неверный код.

2) Когда вы пытались протолкнуть, он остановил вас с предупреждением о создании нескольких голов в удаленном репо.Используя опцию -f для hg push, ваша проблема обострилась.Вы оказались с двумя головами в вашем удаленном хранилище.Будьте осторожны с нажатием -f.Он отменяет попытки Mercurials помешать вам создать проблему.Могут быть веские причины для создания нескольких головок в удаленном репозитории, но лучше всего быть совершенно ясно, что это именно то, что вы хотите сделать.

В дальнейшем я буду считать, что вы выдвинули несколько головокк вашему удаленному репо.

На данный момент, лучшим решением будет объединить две головы в одну.

Из вашего описания звучит строка, что у вас есть что-то похожее на это:

hg log -G

@  changeset:   4:fa78b78c5094
|  tag:         tip
|  user:        Craig
|  date:        Sun Oct 21 10:38:15 2018 -0600
|  summary:     Good commit 2
|
o  changeset:   3:af5cfaf651ff
|  parent:      0:f46808ac779b
|  user:        Craig
|  date:        Sun Oct 21 10:38:02 2018 -0600
|  summary:     Good commit 1
|
| o  changeset:   2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 10:37:44 2018 -0600
| |  summary:     Bad commit 2
| |
| o  changeset:   1:9168cd930d40
|/   user:        Craig
|    date:        Sun Oct 21 10:37:32 2018 -0600
|    summary:     Bad commit 1
|
o  changeset:   0:f46808ac779b
   user:        Craig
   date:        Sun Oct 21 10:18:32 2018 -0600
   summary:     Commit some work

В моем тестовом репо я бы сделал следующее, чтобы объединить головы:

hg update 4

hg merge 2

Примечание: hg merge без номера будет работать, если есть только две головы.

Скорее всего, вам потребуется разрешить конфликты слияния.

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

Как только вы полностью уверены, что изменения (в результате слияния) - это то, что вам нужно, вы можете зафиксировать слияние:

hg merge -m "Merge heads"

На данный момент у вас должна быть только одна головка, которая выглядит следующим образом:

@    changeset:   5:8f9e6a947b3a
|\   tag:         tip
| |  parent:      4:fa78b78c5094
| |  parent:      2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 11:14:43 2018 -0600
| |  summary:     Merge heads
| |
| o  changeset:   4:fa78b78c5094
| |  user:        Craig
| |  date:        Sun Oct 21 10:38:15 2018 -0600
| |  summary:     Good commit 2
| |
| o  changeset:   3:af5cfaf651ff
| |  parent:      0:f46808ac779b
| |  user:        Craig
| |  date:        Sun Oct 21 10:38:02 2018 -0600
| |  summary:     Good commit 1
| |
o |  changeset:   2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 10:37:44 2018 -0600
| |  summary:     Bad commit 2
| |
o |  changeset:   1:9168cd930d40
|/   user:        Craig
|    date:        Sun Oct 21 10:37:32 2018 -0600
|    summary:     Bad commit 1
|
o  changeset:   0:f46808ac779b
   user:        Craig
   date:        Sun Oct 21 10:18:32 2018 -0600
   summary:     Commit some work

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

Мой лучший совет - не торопитесь с этим и проверяйте, что каждый шаг делает то, что вы ожидаете и хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...