форсировать или отменять слияние в Mercurial? - PullRequest
4 голосов
/ 01 апреля 2011

Когда я делаю «ртутные головы», я вижу две головы.

Я хочу просто взять изменения с первого и полностью игнорировать другое.

Это то, что делает hg push -f?

Как я могу сказать Mercurial просто игнорировать вторую голову?

Ответы [ 2 ]

5 голосов
/ 01 апреля 2011

Этот совет хорошо освещает:

https://www.mercurial -scm.org / вики / TipsAndTricks # Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge

Если вы обновитесь до того, который хотите, то запустите:

hg --config ui.merge=internal:local merge  #keep my files

Вы не хотите hg push -f.

3 голосов
/ 01 апреля 2011

Эта страница дает три различных метода избавления от веток, но также будет работать и для руководителей. Ветвь создается, когда changeset имеет более одного дочернего элемента.Именованные ветви могут быть созданы с помощью команды hg branch, однако безымянные ветви могут быть созданы (случайно или специально) путем передачи двух наборов изменений одному и тому же родителю.

Например, если я создаю новый репозиторий, добавляю в него файл и фиксирую, этот коммит будет иметь набор изменений 0.

hg init     # create repo
# edit file myfile.txt
hg add myfile.txt 
hg ci -m 'added myfile.txt' # creates changeset 0

Затем я делаю еще несколько изменений и снова фиксирую, создавая набор изменений 1, чьим родителем является набор изменений 0.

# more edits to myfile.txt
hg ci -m 'changed myfile.txt' # creates changest 1, with parent changeset 0

Теперь по неизвестной причине я возвращаюсь к набору изменений 0, внесу некоторые изменения в myfile.txt и зафиксирую их.

hg up -C 0    # update to changeset 0
# more edits to myfile.txt
hg ci -m 'edited myfile.txt' # creates changeset 2, who's parent is also changest 0

Теперь мы сделали что-то странное.Мы вернулись до изменения 1 и сделали другое изменение.Мы вернулись во времени в нашем коде и изменили что-то, создавая альтернативную вселенную, как в BttF Part II!

Ну, ладно, не совсем.Мы действительно только что создали ветку.Однако это неназванная ветвь, так как мы не создали ее с помощью команды hg branch (и поэтому не отображаются в ветвях `hg).Он также создал новую голову .Головки - это просто наборы изменений без дочерних элементов, поэтому любая ветвь с именем или без имени, которая не была объединена или закрыта, будет иметь головку.

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

Как я уже говорил ранее, это создает неназванную ветвь.Однако вы можете относиться к этой ветке так же, как к любой другой ветке.Команда hg update branch_name просто обновляет вас до заголовка этой ветви, поэтому для безымянной ветви вы можете просто обновить заголовок этой безымянной ветви с помощью hg update head_revision и hg heads выведет список глав для вас (или hg heads -vесли вам нужна дополнительная информация о каждой головке).

Я бы порекомендовал просто закрыть головку, которая вам больше не нужна (первый вариант в первой ссылке выше).Таким образом, он все еще там, на случай, если он вам понадобится позже, но он не будет отображаться в hg heads.Для этого выполните следующие команды:

hg up -C head_to_close
hg commit --close-branch -m 'Closing un-wanted head'
hg up -C head_to_keep

Вы должны выяснить, какую головку вы хотите закрыть.hg heads -v даст вам расширенную информацию о головах.Вы также можете обновить до каждого hg up head_changeset и изучить код, чтобы выяснить, какой из них вы хотите закрыть.

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