mercurialでコミットをまとめる方法
gitではできてたけど、mercurialでよくわからなかったので調べた。
目的としては、区切りのいいところで適当にコミットしたものを、pushする前にまとめて、ちゃんとしたコメットコメントをつけたい、といったところ。
histeditがよさそうだったので試してみる。
mercurialのバージョンは2.6.2
$ hg --version Mercurial Distributed SCM (version 2.6.2) (see http://mercurial.selenic.com for more information) Copyright (C) 2005-2012 Matt Mackall and others This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
~/.hgrcに設定
[extensions] histedit =
リポジトリはこのような状態を作成
$ hg glog --style=compact @ 5[tip] 402aa1b6e745 2013-08-19 21:16 +0900 brainstorm | add d.txt | o 4 261ba91ff77c 2013-08-19 21:16 +0900 brainstorm | add c.txt | o 3 c9e85b1d5b08 2013-08-19 21:16 +0900 brainstorm | add b.txt | o 2 b7d44126e998 2013-08-19 21:16 +0900 brainstorm | add a.txt | o 1 5a16139f8200 2013-08-19 21:16 +0900 brainstorm | create branch ticket9999 | o 0 ef682b76f9f3 2013-08-19 21:16 +0900 brainstorm add README.txt
hg histedit 1を実行してみる
エディタが起動して、指定したリビジョンから昇順でtipまでコミットが表示される。
pick 5a16139f8200 1 create branch ticket9999 pick b7d44126e998 2 add a.txt pick c9e85b1d5b08 3 add b.txt pick 261ba91ff77c 4 add c.txt pick 402aa1b6e745 5 add d.txt # Edit history between 5a16139f8200 and 402aa1b6e745 # # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # f, fold = use commit, but fold into previous commit (combines N and N-1) # d, drop = remove commit from history # m, mess = edit message without changing commit content #
リビジョンの1-5までをひとつのコミットにしたい
2-5を全部foldにしてみる
pick 5a16139f8200 1 create branch ticket9999 f b7d44126e998 2 add a.txt f c9e85b1d5b08 3 add b.txt f 261ba91ff77c 4 add c.txt f 402aa1b6e745 5 add d.txt # Edit history between 5a16139f8200 and 402aa1b6e745 # # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # f, fold = use commit, but fold into previous commit (combines N and N-1) # d, drop = remove commit from history # m, mess = edit message without changing commit content #
保存すると以下の状態で再度エディタが開くのでコメントを適当に直して保存する。
create branch ticket9999 *** add a.txt HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: Brainstorm <brainstorm@example.com> HG: branch 'ticket9999' HG: changed a.txt
するとfoldしたコミットの数だけ何度もエディタが開く。
今回の例の場合は4回開く。
2回目はこんな感じ。foldするコミット毎に、コミットコメントを修正するチャンスがある。
もともとのコミットコメントを見て、最終的なコミットコメントをちゃんと直せということか。
「***」とか、もともとのコミットコメント「add b.txt」は消さないと、そのまま使われるので注意
refs #9999 xxxx xxxx xxxx. *** add b.txt HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: Brainstorm <brainstorm@example.com> HG: branch 'ticket9999' HG: changed a.txt HG: changed b.txt
エディタを全て保存すると終了。
ログを見るとコミットが一つになっていることがわかる
$ hg glog --style=compact @ 1[tip] c752da0cffe9 2013-08-19 21:32 +0900 brainstorm | refs #9999 xxxx xxxx xxxx. | o 0 e3d6997f2419 2013-08-19 21:32 +0900 brainstorm add README.txt