gitでトピックブランチに対する変更内容のみを列挙する


2011年 03月 11日

問題

「トピックブランチをばんばん作ってある程度のところで統合ブランチへマージする」
という開発スタイルを行っていたとしましょう。
トピックブランチでの作業中や統合ブランチへマージする前など、
状況確認のためにトピックブランチに対してどれだけ変更が行われているか調べることはよくあります。

コミットした数が大したことないのであれば単に git log を実行して
最初の数コミット分だけ眺めれば済む話なのですが、
余分なものが表示されると五月蠅いですし、
コミット数が増えてくるとさすがに面倒になってきます。
どうすれば必要な分だけ列挙することができるでしょうか。

解決方法

<since>..<until> 表記を使います。
例えばトピックブランチの名前が topic、
topic の元となった統合ブランチを master とすると、
以下のコマンドで topic に対する変更点のみを列挙することができます:

$ git log master..topic

このコマンドで列挙されるコミットは
「topicから辿れるコミット全て。ただしmasterから辿れるコミットは除く」
になります。
結果としてtopicがmasterから分岐した後にtopicに対して行われた変更点のみを列挙することができます。

実際には git log に色々とオプションを付けて実行することになるでしょう。
例えばtopicに対してどれぐらいコミットが行われたか知りたければ以下のコマンドでできます:

$ git log --oneline --reverse master..topic

topicをmasterへマージする前に変更内容をレビューするのであれば以下のコマンドでできます
(-p を指定すると各コミットでの差分が追加出力されます):

$ git log -p --reverse $master..$topic

補足

  • git logには -p 以外にも様々なオプションがあるので一度マニュアルに目を通しておくとよいでしょう
    (例えば -S<string>)。
  • gitrevisions(7)にはここで紹介した<since>..<until> 以外にもリビジョンやリビジョンの範囲の指定方法について記述されています。
    こちらも一度目を通しておくとよいでしょう。