Mercurial: Как работать с одной ветвью, у которой две головы

Что делать, если у одной ветви две головы? Я пришел к этой ситуации несколько недель назад, почему-то тогда я их не сливал, а просто продолжал развиваться на одной голове. Теперь я хочу избавиться от другой головы. Что я должен делать? Должен ли я просто объединить их после стольких наборов изменений?

26
задан Helgi 30 May 2012 в 21:26
поделиться

2 ответа

Итак, у вас есть это:

o--o--o--A--B  <- older unnecessary head
       \
        1--2--3--4--5--6  <- newer ‘good’ head

... и вам не нужны A и B, безусловно, на 100% уверены. Если вы не уверены , и, возможно, в A и B есть вещи, которые можно спасти, лучше объединить головы, чтобы объединить изменения. Как сказал Аарон, Mercurial хорош в этом.

Теперь у вас есть два варианта:

  • избавиться от старой головы или
  • сделать фиктивное слияние двух головок, которое игнорирует голову B.

Если наборов изменений A и B присутствуют в других репозиториях, которыми вы не управляете , например, если другие люди втянули A и B в свои репозитории, или вы отправили A и B в общедоступный репозиторий (скажем, Bitbucket), то вы выпустили A и B в дикую природу. и не могу от них избавиться. Вы должны сделать фиктивное слияние :

$ hg up 6
$ hg --config ui.merge=internal:local merge

Это позволит игнорировать любые изменения из A и B при слиянии.

Если, с другой стороны, A и B являются частными , вы можете удалить их:

$ hg strip A

(Rev A и потомков убрали; включите расширение MQ, чтобы сделать strip доступным.)

Или создайте новый клон вашего хранилища без наборов изменений A и B:

$ hg clone myrepo myrepo2-clone -r 6

(Только кн. 6 и предки добавлены в клон.)

31
ответ дан 28 November 2019 в 07:32
поделиться

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

Обычное решение - объединить их. Mercurial очень хорош при слиянии. Скорее всего, результат все равно будет скомпилирован и запущен без какой-либо ручной работы.

Просто запустите hg merge, а затем hg status и hg diff, чтобы увидеть, что изменилось между ними. Если вам нравится результат, передайте его. Если вам это не нравится, update отправляйтесь чистить свое рабочее место.

Чтобы избавиться от головы, в документах объясняется, как это сделать .

Используя MQ, вы также можете превратить вторую головку в независимую ветвь (так что вы можете сохранить ее, но это вас не побеспокоит). Смотрите ответ: Как создать ветку для ревизии без подсказки в Mercurial?

9
ответ дан 28 November 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: