Mercurial: как бороться с одной веткой с двумя головами - PullRequest
26 голосов
/ 03 августа 2011

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

Ответы [ 3 ]

30 голосов
/ 04 августа 2011

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

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

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

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

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

Если changesets 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

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

9 голосов
/ 03 августа 2011

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

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

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

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

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

0 голосов
/ 03 августа 2011

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

...