hg branch ,hg merge

ブランチの作成

デフォルトbranchにvim
defo(中身も"defo")というファイルを作って
add ciもしておく

$ ls
defo

新しくブランチ作る

$hg branch bra2(新しく作るブランチの名前)

コミットしないとhg branchesに反映されないので
$hg ci
$hg branches
bra2 1:fc39640c462b
default 0:f7797dac7887 (inactive)

hg branchesはレポジトリ内のブランチをすべて表示してくれる
bra2に適当なファイル作ってaddしてciする

$ ls
defo bra2(今作った適当ファイル)

これでブランチbra2にはbra2ファイルがあるけど
defaultにはないはず


ブランチを切り替える

ブランチを切り替えるにはupdateコマンドを使う

$ hg up default(切り替わり先のブランチ名)

これで今defaultブランチに切り替わったはずなので確かめる

$ hg branch
default

hg branchのみだと今いるブランチ名を教えてくれる
(今はdefaultにいる)
ついでにdefaultにはbra2ファイルがないはずなので
確かめよう

$ ls
defo

bra2がないのでちゃんとできているようだ
もうひとつbranchを作ってみる

$ hg branch bra3
$ hg branch
bra3
$ ls
defo

またbra3というファイル作って
defoの中身を’bra3’に変えてみる

$ vim bra3
$ vim defo(中身を'bra3'に)
$ hg add bra3
$ hg st
M defo
A bra3
$ hg ci ※必ずコミットしましょう
created new head

※'heads' とはあるブランチの上での最も最近のコミットです。技術的に言えば子をまったく持たないチェンジセットのことです。マージとは2つのheadsを一つにまとめる操作であると言えます。hg headsとすると現在のリポジトリ内のheadsを見ることができます

$ ls
bra3 defo
$ hg branches
bra3 3:927f81edeefd
bra2 2:33a844d7fa20
default 0:f7797dac7887 (inactive)

で今中身は

default defo'defo'
bra2 defo'defo' ,bra2
bra3 defo'bra3' ,bra3

という状態。。
では今度はbra2にbra3をマージしてみる

$ hg up bra2
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ ls
bra2 defo
$ hg merge bra3
erging defo
warning: conflicts during merge.
merging defo failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges

なんか'hg resolve'しろってこと?

$ ls
bra2 bra3 defo defo.orig

今コミットしようとしてもエラーがでる

abort: unresolved merge conflicts (see hg resolve)

たぶんdefoが同じ名前やのになかみが違うからかな

defo.origってのができてるたぶんオリジナル
'hg resolve'ってのをしらべると

hg resolve -l - マージする必要があるファイルを一覧表示
hg resolve -m - ファイルを問題解決済みとしてマーク
hg resolve -u - ファイルを問題未解決としてマーク

らしいので今回defo.origを手動で消して

hg resolve -m する

$ rm defo.orig
$ ls
bra2 bra3 defo
$ hg resolve -m
$ hg ci
$ ls
bra2 bra3 defo

無事ブランチとマージ完了

追記

tip というものがあって
tipとは、リポジトリに加えられた直近のチェンジセットの事。
今コミットを行ったばかりなら、そのコミット内容がtipという事になる。

逆に、他のリポジトリからpullしたばかりであれば、そのリポジトリのtipが作業中のリポジトリの新しいtipになります。リポジトリのtipを表示するには、hg tipコマンドを使ってください。
tip は常にheadでもあります。リポジトリ内に複数のheadが存在する場合、そのうちの一つだけがtipになるのです。リポジトリ内部でチェンジセットは 連番をふられているので、tipが最大の連番値を持ちます。"tip"という語は、tipチェンジセットを示す特殊なタグとして機能し、チェンジセットIDやタグが使用可能な全ての場所で使用出来ます。