背景
gitリポジトリ上で、リポジトリの最初のコミット(root-commit)からあるコミット(commit-A)までの間で、別のコミット(commit-B)があるかないかを調べたい。
概要
git merge-base
を使う。
本来の使い方はマージをするためにコミット間、ブランチ間の共通の祖先(ancestor)を探すコマンド。
探しかた
git merge-base <commit-A> <commit-B>
で共通の祖先(ancestor)を検索する
ancestorが <commit-B>
と一致すれば、 <commit-B>
は <root-commit>
から <commit-A>
までの中に含まれている。
イメージ図
- ancestorが
<commit-B>
に一致する場合
<commit-B>
|
o---o---o---o---o---o---X
| |
| <commit-A>
L<root-commit>
その他の場合のイメージ図
- ancestorがどちらのコミットにも一致しない場合(1のコミットが表示される場合)
<commit-B>
|
o---o---o---Y
/
o---o---1---o---o---o---X
| |
| <commit-A>
L<root-commit>
- ancestorが
<commit-A>
に一致する場合
<commit-B>
|
o---o---o---o---o---o---o---o---o---X
| |
| <commit-A>
L<root-commit>
最後に
もっと複雑なブランチ構造もあるので、全部が全部これで説明できるかは不明。