Доброго времени суток. История такова: была единая ветка(default), в которую я потихоньку делал комиты. Тут решил поработать над некоторой фичей в отдельной ветке. Сделал новую ветку:
hg branch feature
// затем сразу закомитил
hg commit -m "Initial commit of feature"
Теперь у меня появилось две ветки: default и feature. Я возвращаюсь в ветку default(hg update default), затем вношу некоторые изменения в код и делаю комит. Всё отлично, закомитил. И тут я думаю дайка я переключусь на свою ветку feature и поработаю над ней, делаю hg update feature на что mercurial начал ругаться, мол неплохо бы сделать merge или откатить изменения типа hg update -C(точно вывод не помню, не у компа). Чё ему надо ваще, чё он хочет? У меня же две ветки, просто хочу переключиться с одной на другую, потом, когда вторую ветку допилю - буду мержить, сейчас нафига?
Один раз у коллеги такое тоже произошло. Не знаю, как он этого добился, но в рабочем каталоге с дочерней ревизией бранча X был установлен бранч default, хотя бранч default находился на самом деле в другом месте. Вылечилось командой branch X.
покажи вывод hg parent, hg heads и hg state -mardC на голове ветки default. скорей всего есть незафиксированные изменения, может ты файл какой добавил или удалил или еще что. потому что если изменений нет, то мержить ничего, очевидно, не надо.
$ hg init test
$ cd test
$ touch file1
$ hg add
adding file1
$ echo commit1 >>file1
$ hg com -m "default commit1"
$ hg branch feature
marked working directory as branch feature
$ hg branch
feature
$ echo commit2 >>file1
$ hg com -m "feauture commit1"
$ hg parent
changeset: 1:b25f67622022
branch: feature
tag: tip
user: Alexander Sauta <demosito@gmail.com>
date: Fri Feb 03 10:24:34 2012 +0400
summary: feauture commit1
$ hg up default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo commit3 >>file1
$ hg com -m "default commit2"
$ hg up feature
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
У меня после того как я сделал hg branch feature, не смог переключитьс яна неё, сказал мол надо закомитить.
hg branch feature:
Без аргументов показывает имя текущей ветви. С одним аргументом задает имя
ветви для рабочего каталога (ветвь не будет создана в репозитории до
следующего коммита).
А по теме, если hg st ничего не показывает, то хз...
Я запросил список ветвей hg branches, показало только одну - default
Потому что ты ничего не закомитил в новую ветку, вот он и показывает, что ее нет. hg branch feature говорит, что следующий комит должен помечаться как комит на ветку feature. Если ты ничего не закомитил, а сразу обновился на ветку default (hg up default), то и ветвь feature создана не будет, т.к. на ней нет комитов.
Это написано в первой строчке мана по branch.
Ветка в ртути - это дополнительное поле в каждом комите, т.е. она не существует без комитов, и множество комитов с этим одинаковым полем образуют одну ветку. Ты, видимо, хотел создать «легковесную» ветку а-ля гит, для этого надо использовать hg bookmark или просто обновиться на одну ревизию назад и закомитить.
Это временные файлы cmake, они должны быть разными на разных машинах. Они генерируются автоматически при заупуске cmake. В репах их быть не должно. Если другой человек запустит сборку на своей машине с твоими каталогами, у него нихрена не заработает.
у тебя точно были незакоммиченные изменения, возможно что от работы cmake.
Интересно, откуда им было взяться, ведь по графику видно, что новую ветку я сделал после коммита в default. Чёта трудно мне этиветки даются, надо было комитить в default, «идти по линейке» и проблем не знать )))
надо было комитить в default, «идти по линейке» и проблем не знать
Дык обычно это так и далается: ты коммитишь изменения своей фичи прямо поверх последней обычной ревизии, а потом обратно обновляешься на нее и коммитишь уже обычные изменения. Так у тебя получается две неименованные ветки.
$ hg init test
$ cd test
$ echo "default commit1" >>file1
$ hg add
adding file1
$ hg com -m "default commit1"
$ hg tag def1
$ echo "feature commit1" >>file1
$ hg com -m "feature commit1"
$ echo "feature commit2" >>file1
$ hg com -m "feature commit2"
$ hg up def1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "default commit2" >>file1
$ hg com -m "default commit2"
created new head
$ hg glog
@ changeset: 4:4a32b03b3ac2
| tag: tip
| parent: 0:d23fc588d1af
| user: Alexander Sauta <demosito@gmail.com>
| date: Fri Feb 03 13:15:48 2012 +0400
| summary: default commit2
|
| o changeset: 3:28ca8891d9d6
| | user: Alexander Sauta <demosito@gmail.com>
| | date: Fri Feb 03 13:15:28 2012 +0400
| | summary: feature commit2
| |
| o changeset: 2:2bd10cc68fe2
| | user: Alexander Sauta <demosito@gmail.com>
| | date: Fri Feb 03 13:15:17 2012 +0400
| | summary: feature commit1
| |
| o changeset: 1:a4cced5b87dc
|/ user: Alexander Sauta <demosito@gmail.com>
| date: Fri Feb 03 13:14:54 2012 +0400
| summary: Added tag def1 for changeset d23fc588d1af
|
o changeset: 0:d23fc588d1af
tag: def1
user: Alexander Sauta <demosito@gmail.com>
date: Fri Feb 03 13:14:48 2012 +0400
summary: default commit1
Так ветки получаются автоматически, ничего делать даже не надо. Можно при необходимости пометить нужную ревизию закладкой, чтобы обновляться на нее по имени. Это будет так же, как в гите. И именно это тебе и нужно, потому что ветки, которые создаются командой branch - долгоживущие, они остаются в истории навсегда (правда, их можно закрыть и не показывать).
Их как правило используют для двух непрерывно существующих линий разработки. Например, сам mercurial использует две именованных ветки: default и satble. В первой ведется вся разработка, она сливается во вторую как только ревизия оказывается достаточно безопасной и оттестированной.
В общем, есть два вида веток: легковесные, как в гите - они создаются командой bookmark и обновлением назад с последующим комитом, и долгоживущие, которые остаются в истории навсегда и используются для долгоживущих веток. Последние создаются командой branch и как правило не используются для коротких ответвлений для багфикса или небольшой фичи.
Думаю надо так же сделать. мне теперь можно вернуться к комиту с которго я начал ветвление и удалить всё что было «выше», т.е удалить коммит в новой ветке scrollbars и удалить коммит в ветке default, т.е вернуться к состоянию, будто я никаких веток и не делал?
Думаю надо так же сделать. мне теперь можно вернуться к комиту с которго я начал ветвление и удалить всё что было «выше», т.е удалить коммит в новой ветке scrollbars и удалить коммит в ветке default, т.е вернуться к состоянию, будто я никаких веток и не делал?
Если ты хочешь удалять, то освой hg mq. Это чем-то похоже по задаче на гитовские лёгкие ветки, которые ты удаляешь после мерджа. Хотя работает немного не так.
странно это, такого не должно быть при явном указании ветки или ревизии. либо у тебя очень древний hg, либо какая-то херня, потому что у меня такого нет.