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やタグが使用可能な全ての場所で使用出来ます。