Что, если одна ветвь имеет две головы? Я пришел к этой ситуации несколько недель назад, почему-то я не объединил их тогда и просто продолжал развиваться на одной голове. Теперь я хочу избавиться от другой головы. Что мне делать? Должен ли я просто объединить их после стольких наборов изменений?
Mercurial: как иметь дело с одной ветвью, которая имеет две головки
Ответ 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
Если вам нужно сохранить изменения в старой ветке, вы должны объединить их, и это не должно быть проблемой.