git log –graph –oneline において、祖先–子孫関係にないコミットを判定できるか

投稿者: Anonymous

git log を利用する際に、便利なので、ほとんど--graph, --onelineオプション(+α)を指定して利用しています。

このときに、歴史的に交わりのないコミット群A,Bがあった場合には、一方のコミット群がもう一方コミット群のすぐ上に表示されてしまい、あたかも歴史がつながっているかのように見えてしまいます。(revision range の指定の仕方次第で発生する)

--oneline オプションをつけなければ、このようなことはおこらないのですが、そうすると歴史の表示が--onelineの場合に比べて間延びしてしまうので、できれば、--onelineオプションを利用しながら、歴史がつながっているかどうかを判定したいと考えています。これは実現可能でしょうか。

解決

--oneline の代わりに、 --pretty='%h %s%n' とすれば、末尾に改行が入るため、コミットを繋ぐラインが表示されるようになります。もちろん、直接繋っていないコミット同士は繋がりません。
改行の分、やや間延びしますが、 --pretty=short などよりはコンパクトです。

例えば、

o---*---*---* bar
 --*---*     foo

といったリポジトリで、foo...bar を表示させると以下のようになります。

git log  --graph --oneline --pretty='%h %s%n' foo...bar

* d2c1f34 bar-3
| 
* a2248b6 bar-2
| 
* acf317f bar-1

* ea0dc06 foo-2
| 
* 829a084 foo-1

毎度フォーマット指定をするのが面倒なら、git configformat.pretty を設定してしまうという手も。この場合、複雑な設定でも、コマンドで直接記述する必要がなくなるので、--decorate に相当する記述も追加してみたり、色が出るようにするなど凝ってみるのもよいかもしれません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *