gitで特定のコミットがいつブランチにマージされたのか調べる

こんにちは、さるまりんです。

gitで開発中、masterとdevelopmentブランチがそれぞれこんな感じだったとします。

--A--B---C--D--E--F master
      \       /
       G--H--I--J   development

ここでdevelopmentブランチ上のコミットHがmasterに取り込まれたのはいつかを調べてみます。

図を見ると明らかなのですがI→Eのマージコミットを特定します。

git logなどでコミットHのSHA-1の値を取得します。

そのSHA-1の値を用いてコマンドをそれぞれ実行して共通する最後の行が取得したいマージコミットのSHA-1の値です。

git rev-list [特定したいコミットのSHA-1]..master --ancestry-path
git rev-list [特定したいコミットのSHA-1]..master --first-parent

git rev-listではコミットを時系列逆順に一覧表示します。

上記のコマンドはA..BでAからBの範囲を指定し、
--ancestry-pathでBとその祖先でAの子孫のコミットを、
--first-parentでそれぞれの最初の親コミットのみ(他の親、祖先を無視)を
それぞれ表示させます。

それぞれをファイルに書き出し、一致する最終行をgrepで取得するとマージコミットのSHA-1の値を取得することができます。

git rev-list [特定したいコミットのSHA-1]..master --ancestry-path > FILE1
git rev-list [特定したいコミットのSHA-1]..master --first-parent > FILE2
grep -x -i -f FILE1 FILE2

上で表示されるのはマージコミットのSHA-1の値です。

やりたい事は「いつマージされたか?」でしたね。

SHA-1がわかったので

git show [SHA-1]

で、そのコミットの情報を見ることができます。

gitは本当にいろんなことできますね。

もっと便利に利用していきたいと思います。

読んでくださってありがとうございました。

それではまた!