2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gitで2つのコミットが別のブランチのものかどうか判定する方法

Last updated at Posted at 2018-01-19

背景

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>

最後に

もっと複雑なブランチ構造もあるので、全部が全部これで説明できるかは不明。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?