Skip to main content

プルリクエスト中でのブランチの比較について

プルリクエストは、変更のマージ対象のbaseブランチに対するトピックブランチ中で作成した変更を比較するdiffを表示します。

注: pull request を作成する際に、変更の比較対象となるベース ブランチを変更できます。 詳しくは、「pull request の作成」を参照してください。

pull request 内で提案された変更は、[変更されたファイル] タブで表示できます。pull request のタブのスクリーンショット。 [変更されたファイル] タブが濃いオレンジ色の枠線で囲まれています。

コミットそのものを見るよりは、プルリクエストがマージされた際に提案された変更がファイルに現れるのを見ることができます。 Files changed タブではファイルはアルファベット順に表示されます。追加したファイルは緑色になり + 記号が前に付きます。一方、削除したコンテンツは赤色になり、- 記号が前に付きます。

diff 表示の選択肢

ヒント: 変更のコンテキストを理解するのが難しい場合は、Files changed タブの View をクリックすると、提案された変更を含むファイル全体が表示されます。

diff の見方には複数の選択肢があります。

  • 統合ビューでは、更新分と既存の内容が線形ビューに一緒に表示されます。
  • 分割ビューでは、古い内容が片側に、新しい内容が反対側に表示されます。
  • リッチ diff ビューでは、プルリクエストがマージされたときに変更がどのように見えるかのプレビューが表示されます。
  • ソースビューでは、ソース内の変更がリッチ diff ビューのフォーマットなしで表示されます。

プルリクエスト中の大きな変更をもっと正確に表示するために、空白の変更を無視するよう選択することもできます。

pull request の [変更されたファイル] タブのスクリーンショット。 "差分ビュー" が濃いオレンジ色の枠線で囲まれています。

大規模なプルリクエスト中の変更のレビューを簡素化するために、選択されたファイルタイプだけを表示、CODEOWNERS であるファイルを表示、表示したことのあるファイルを非表示、または削除されたファイルを非表示にするように diff をフィルタリングできます。 詳しくは、「プルリクエスト内のファイルをフィルタリングする」を参照してください。

[ファイル フィルター] ドロップダウン メニューのスクリーンショット。 メニューが展開され、濃いオレンジ色の枠線で囲まれています。

diffが表示されない理由

スリードットおよびツードット Git diff での比較

git diff コマンドには、ツードット (git diff A..B) とスリードット (git diff A...B) という 2 つの比較方法があります。 GitHub に対する pull request ではスリードットの差分が表示されます。

スリードット Git 差分の比較

スリードット比較では、両方のブランチ (マージ ベース) の最新共通コミットとトピック ブランチの最新バージョンの差分が表示されます。

ツードット Git 差分の比較

ツードット比較では、ベース ブランチ (main など) の最新状態とトピック ブランチの最新バージョンの差分が表示されます。

GitHub 上で、ツードット diff を比較する際に 2 つの committish のリファレンスを見たい場合には、リポジトリの [Comparing changes] ページの URL を編集できます。 詳細については、Pro Git ブック サイトで Git 用語集の「committish」を参照してください。

たとえば、この URL では、短縮された SHA コードを使用してコミット f75c5703391dcc を比較します: https://github.com/github-linguist/linguist/compare/f75c570..3391dcc

ツードット diff は SHA あるいは OID (Object ID) など、2 つの Git の committish 参照を直接互いに比較します。 GitHub では、ツードット diff での比較中の Git の committish 参照は、同じリポジトリあるいはそのフォークにプッシュされなければなりません。

プルリクエスト中でツードット diff をシミュレートし、各ブランチの最新バージョン同士の比較を見たい場合には、ベースブランチをトピックブランチにマージできます。そうすれば、ブランチ間の最後の共通の祖先が更新されます。

変更を比較するための Git コマンドの詳細については、Pro Git ブック サイトの「git 差分オプション」を参照してください。

GitHub でのスリードット比較について

スリードット比較はマージ ベースと比較するため、"pull request によって何が導入されるか" に焦点を当てています。

ツードット比較を使用したときは、トピック ブランチに変更を加えていない場合でも、ベース ブランチが更新されると差分が変化します。 また、ツードット比較はベース ブランチに焦点を当てます。 つまり、追加したものは、ベース ブランチに存在しないものとして (削除されたかのように) 表示されます。その逆も同様です。 その結果、トピック ブランチが導入する変更があいまいになります。

対照的に、スリードット比較を使用してブランチを比較すると、ベース ブランチが更新された場合、トピック ブランチの変更は常に差分に含まれます。この差分には、ブランチが分岐してからのすべての変更が表示されるためです。

頻繁なマージ

混乱を避けるためには、ベース ブランチ (たとえば main) をトピック ブランチに頻繁にマージします。 ベース ブランチをマージすることで、ツードット比較とスリードット比較で示される差分が同じになります。 できるだけ早く pull request をマージすることをお勧めします。 このために共同作成者が pull request を小さく作成することが促されます。これは一般的に推奨されます。

参考資料