IntelliJ でブランチ間の差分と作業ブランチ全体のコードレビュー

IntelliJ でブランチ間の差を見たいときは、まず基準ブランチをチェックアウトしてからここ

f:id:tanakahisateru:20150328011746p:plain

f:id:tanakahisateru:20150328011855p:plain

それぞれのコミットの diff を見て、トータルでどれだけ違うかは、Log を Diff に

f:id:tanakahisateru:20150328011859p:plain f:id:tanakahisateru:20150328011919p:plain

これで HEAD 同士の比較です。

でも

f:id:tanakahisateru:20150328012404p:plain

master が他のプルリクエストをいろいろマージしていると、作業ブランチはあまり変えてないのに、master が進んでいくせいで差がどんどんできてしまいます。ここまでのスクリーンショットでもすでに README.md が master 側で進んじゃってますね。

そうなると時間が経つほどに、ブランチ HEAD 同士を比べることと、作業ブランチのコミットを累積してどんな作業をしたのかを見ることは、意味が違ってきます。数人で分担作業したものがリリース直前になると、個別のブランチよりもマージを進めている master の方が多くのファイルを変更しちゃってるなんてことが多々あります。

そこで、作業ブランチのコミットの累積をコードレビューする方法を考えます。まずは作業ブランチの base を探します。たぶんその作業は master からブランチしてますよね。じゃあ、Changes パネルのごちゃごちゃした Logs タブに master と対象作業ブランチだけを表示 (補完ありでブランチ名を2つここに書く) しましょう

f:id:tanakahisateru:20150328012834p:plain

それから、2つが合流する共通のコミットを探します

f:id:tanakahisateru:20150328013037p:plain

で、こいつをチェックアウト。この状態で最初の方法で作業ブランチと Compare すると、 作業ブランチでやった変更だけ を確認できます。

f:id:tanakahisateru:20150328015300p:plain f:id:tanakahisateru:20150328015253p:plain

GitHub とか Bitbucket みたいな、プルリクエストのコミット群のサマリーを見ることができるサービスを使ってればいいんですが、そうでない場合、マージしたいブランチで変更のあった行がどこなのか調べるのはちょっと面倒です。まあ、GitHub の プルリクエストページでも Unified Diff になっちゃうので、ソースコードの全体像を見ながらレビューしたいと思っても難しいですね。

f:id:tanakahisateru:20150328020740p:plain

ようは、IDE のパワーを使える状況で、かつソース全体をレビューできるこれが便利なわけですよこれが。