QA@IT

gitで2つのブランチの分岐点を表示

17347 PV

gitで2つのブランチを指定して、分岐したコミットを探すにはどうすれば良いでしょうか?

たとえば、ブランチAがあり、 ある時点 で $ git checkout -b B をしてブランチBを分岐したとします。
その後AにもBにもコミットが積まれたあとで、 ある時点 のコミットを知りたいです。

回答

git log でできないでしょうか。
--graph オプションと --[all|branches|etc...] オプションを併用することで、

  • これまでどのように分岐してきたか
  • 現在どのように分岐しているか

を可視化することが可能です。

例えば、以下のように分岐しているリポジトリがあるとして、

branch2:                +--*-----*--
                       /
branch1:        +--*--+------*------
               /
master : --*--+----------------*----

※ "*": コミットを行った部分

以下のようにコマンドを実行すると、(横に長くなるので短縮ハッシュを表示するようにしています)

$ git log --graph --branches --pretty=format:"%d [%h] \"%s\""
*  (HEAD, branch2) [438fb69] "branch2 file6"
*  [19eb447] "branch2 file3"
| *  (master) [5993372] "master file5"
| | *  (branch1) [9540356] "branch1 file4"
| |/
|/|
* |  [eb5d49a] "branch1 file2"
|/
*  [eabe4c0] "master file1"

出力結果により、branch1 と branch2 は "eb5d49a"(短縮ハッシュ) のコミットを元に分岐していることが把握できるかと思います。

git log で利用できるオプションの詳細につきましては、git help log もしくは 公式のリファレンス をご参照いただければと思います。


サンプルに使用したリポジトリの内容は以下のように作成しました。

$ git --version
git version 1.7.9
$ git init sample && cd sample
$ touch file1 && git add file1 && git commit file1 -m "master file1"
$ git checkout -b branch1
$ touch file2 && git add file2 && git commit file2 -m "branch1 file2"
$ git checkout -b branch2
$ touch file3 && git add file3 && git commit file3 -m "branch2 file3"
$ git checkout branch1
$ touch file4 && git add file4 && git commit file4 -m "branch1 file4"
$ git checkout master
$ touch file5 && git add file5 && git commit file5 -m "master file5"
$ git checkout branch2
$ touch file6 && git add file6 && git commit file6 -m "branch2 file6"
編集 履歴 (0)
  • gitkコマンドでGUIが起動するのでこちらを利用する手もあります。 -
  • ご回答ありがとうございました。log --graph、便利ですよね。調べてみて、今回のケースは show-branch を使うのが良いのではと考えてます。 -

調べた結果、以下の方法が良いのではと思っています。
$ git show-branch --sha1-name branch_A branch_B
分岐してからの全てのコミットが表示され、この際に表示される最後の行が分岐点となるはずです。
なので、以下のコマンドで分岐点のコミットを表示できます。
$ git show-branch --sha1-name branch_A branch_B | tail -1

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。