#128 Mercurial でのちょっとした Tips

これは Mercurial Advent Calendar 2012 23日目の記事です。

正直ネタに困っていたんですが、困った繋がりで私が Mercurial を使っていて便利な/困った時に助かった操作をTips形式で紹介します。
本当に小ネタなんで、驚きの操作はないはずですよ!

マージを取り消したい

ブランチ切って作業していて、「よし、完了した!」と思ってメインのブランチにマージしてみたら、「…あれ、この作業[足りなく|不要じゃ|間違って]ね?」ということ、多くはないですがあります。
これだけでも残念なんですが、さらに悪いことに、それに気が付くのがマージコミット後だったりして、ほんとアレ。

こんな時、私は rollback して元のブランチに update して修正します。
C:\User\Gab_km\myrepo>hg rollback
tip をリビジョン 5 に巻き戻しました (取り消し commit)
1 と 5 が作業領域の親リビジョンになりました

C:\User\Gab_km\myrepo>hg update -C myBranch
ファイルの更新数 2、 マージ数 0、 削除数 0、 衝突未解消数 0
なお、 strip を使う方法もあるようですね。

Mercurialでアレを元に戻す108の方法

あるリビジョン時点でのファイル内容が見たい

コミットの歴史を積み重ねて、ふと「あのリビジョンのあのファイルでは、どう書いてたっけなぁ」と振り返りたくなることがあるかもしれません。

そんな時に使えるのが cat です。
C:\User\Gab_km\myrepo>hg cat 4 hoge.py
def spam(message, times):
    result = ""
    for i in range(times):
        result = result + message
    return result

if __name__ == '__main__':
    print(spam("Spam!", 4))

ファイルを指定してコミットする

Git と Mercurial を併用しているときに違ってくるポイントに、コミットの仕方があります。

Git は明示的にコミットしたいファイルをステージングしてからコミットしますが、 Mercurial は登録されたファイルはデフォルトで全てがコミット対象です。

Mercurial の方が操作が簡単だなと思う一方、コミットを分けてで入れたかった他のファイルの修正を誤って同じコミットに入れてしまう、ということもあるかもしれません。

Mercurial では、ファイルを指定してのコミットも可能です。
ファイルを変更したけどまだコミットしたくない場合は、次のようにコミットしたいファイルだけ選んでコミットしましょう。
C:\User\Gab_km\myrepo>hg status
M fuga.py
M hoge.py

C:\User\Gab_km\myrepo>hg commit fuga.py -m "commit only fuga.py"

C:\User\Gab_km\myrepo>hg status
M hoge.py

特定ブランチのリビジョングラフを見る

Mercurial ユーザ諸兄は、グローバルな hgrc で graphlog を有効化されていることと思います。
C:\User\Gab_km\myrepo>hg glog -l 3
@    チェンジセット:   7:3eedb8286885
|\   タグ:             tip
| |  親:               1:06352cc90a8b
| |  親:               6:bbd9b09a6928
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 13:01:27 2012 +0900
| |  要約:             merged
| |
o |  チェンジセット:   6:bbd9b09a6928
| |  ブランチ:         ticket/#1
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 13:01:05 2012 +0900
| |  要約:             [from now] 2012/12/22 13:01:05.28
| |
o |  チェンジセット:   5:68a046f79639
| |  ブランチ:         ticket/#1
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 09:12:17 2012 +0900
| |  要約:             [from now] 2012/12/22  9:12:17.29
| |
ブランチの履歴が一目瞭然なのがいいですね。

これを、あるブランチに着目して見たいと思ったときは、 hg glog -b branchName と入力します。
C:\User\Gab_km\myrepo>hg glog -l 3 -b ticket/#1
o  チェンジセット:   6:bbd9b09a6928
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 13:01:05 2012 +0900
|  要約:             [from now] 2012/12/22 13:01:05.28
|
o  チェンジセット:   5:68a046f79639
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 09:12:17 2012 +0900
|  要約:             [from now] 2012/12/22  9:12:17.29
|
o  チェンジセット:   4:0f1b086dcfe0
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 07:31:09 2012 +0900
|  要約:             [from now] 2012/12/22  7:31:09.50
|

まとめ

どれもちょっとした操作ばかりですが、「あー、こういうことしたいんだけどなぁ」という小さな要望も、 Mercurial は叶えてくれますね。

トラックバックURL

#128 Mercurial でのちょっとした Tips へのトラックバック

まだトラックバックはありません。

#128 Mercurial でのちょっとした Tips へのコメント一覧

まだコメントはありません。

コメントする

#128 Mercurial でのちょっとした Tips にコメントする
絵文字
プロフィール
あわせて読みたい
あわせて読みたい
記事検索
Project Euler
なかのひと
アクセス解析
Coderwall
  • ライブドアブログ

トップに戻る