Git の「バウンダリーコミット」とは
Git のコマンドの説明を読んでいると、ときどき「バウンダリーコミット」( boundary commit )ということばが出てくることがあります。
「バウンダリーコミット」。 パッと検索してみましたが日本語での説明がなかなか見つからないので、私が理解している範囲のことをかんたんにまとめておきます。
「バウンダリーコミット」の使われどころ
まずはこのことばが使われている具体的な場面を見ていきます。
git log
例えば、 git log
の場合はこんな感じです。
--boundary
Output excluded boundary commits. Boundary commits are prefixed with-
.
git blame
git blame
の場合だとこんな感じ。
-b
Show blank SHA-1 for boundary commits. This can also be controlled via the blame.blankboundary config option.
--abbrev=<n>
Instead of using the default 7+1 hexadecimal digits as the abbreviated object name, use<n>+1
digits. Note that 1 column is used for a caret to mark the boundary commit.
「バウンダリーコミット」とは
「バウンダリーコミット」は何かというと、要は、コミットログなどを表示する際に「境界線となっているコミット」のことのようです。
具体例を見てみましょう。
例えば、 git log -n 3
と打つと、通常 3 件のログが表示されます。
これに --boundary
オプションを付けて git log -n 3 --boundary
とすると、バウンダリーコミット(境界となるコミット)も表示してくれます。
結果として、 -n 3
と指定しているのに 4 件のコミットログが表示されることになります。
こんな感じです。
$ git log -n 3 --boundary
commit 3889ac827f969af4c3d08c06e8f2cc2c613eef8c
Author: Goto Hayato <example@example.com>
Date: Sun Oct 22 21:13:46 2017 +0900
コミットだね。
commit 04df4398ee13392bfd7693ce76d0ca04018f51b2
Author: Goto Hayato <example@example.com>
Date: Sun Oct 22 00:05:46 2017 +0900
コミットだよ。
commit 5b100525546ac987f75a06e28e49b128571641ce
Author: Goto Hayato <example@example.com>
Date: Sun Oct 22 00:02:04 2017 +0900
コミットかな。
commit - ef0f963a6c3dd5b7486e15dd298860405699d5e8
Author: Goto Hayato <example@example.com>
Date: Sat Oct 21 23:24:35 2017 +0900
コミットかしら。
いちばん下のコミットがバウンダリーコミットです。
上の --boundary
の説明のとおり、バウンダリーコミットにはハッシュ値の前に -
のマークが付いていることが確認できます。
git blame
の場合も git log
と考え方は同じで、「バウンダリーコミット」は範囲の中でいちばん最初のコミットを指すようです。
--root
オプションなどをつけたりしなければ、イニシャルコミットがバウンダリーコミットとみなされます。
上の -abbrev
の説明のとおり、バウンダリーコミットの先頭にはキャレット文字 ^
が付いており他とひと目で区別がつきます。
$ git blame index.php
^38a2fc9 (User Goto 2015-02-22 22:03:47 +0900 1) <?php
^38a2fc9 (User Goto 2015-02-22 22:03:47 +0900 2)
^38a2fc9 (User Goto 2015-02-22 22:03:47 +0900 3) /**
^38a2fc9 (User Goto 2015-02-22 22:03:47 +0900 4) * @file
...
git blame
に上の -b
オプションをつけるとハッシュ値の部分が空文字列になります。
$ git blame index.php
(User Goto 2015-02-22 22:03:47 +0900 1) <?php
(User Goto 2015-02-22 22:03:47 +0900 2)
(User Goto 2015-02-22 22:03:47 +0900 3) /**
(User Goto 2015-02-22 22:03:47 +0900 4) * @file
...
以上です。
一度わかるとどうということはないのですが、聞き慣れていないと「え?バウンダリー?」となりますね。