Подтвердить что ты не робот

Mercurial: как иметь дело с одной ветвью, которая имеет две головки

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

$ hg strip A

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

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

$ hg clone myrepo myrepo2-clone -r 6

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

Ответ 2

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

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

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

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

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

Ответ 3

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