2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubでPRの差分が出ない(Files changed 0)ときの原因調査と解決手順

2
Posted at

GitHubでPRを作ろうとしたら「Files changed 0」になった時の原因調査と対処法(Git)

GitHub上でプルリクエスト(PR)を作成しようとした際に、「Files changed(変更ファイル)」が0件になったり、**「There isn’t anything to compare」**と言われてPRが作成できないことはありませんか?

このドキュメントでは、差分が出ないときの原因調査フロー状況別の解決手順をまとめます。
(※コマンド例は標準的なGitコマンドなので、基本は PowerShell / Bash どちらでも同様に実行可能です)

1. 結論:PR差分が0件になる主な原因

PRの差分が表示されない場合、原因の多くは以下のいずれかです。

  • base(マージ先)と compare(マージ元)が 同じコミットを指している
  • compare ブランチが base よりも 古い(behind)
  • すでにマージ済み(変更が取り込み済み)
  • revert によって変更が打ち消された履歴がある

NOTE(Revertの罠)
一度マージした後に git revert で変更を打ち消した場合、「過去にマージした事実(コミット履歴)」自体は残ります
そのため、再度同じブランチをマージしようとしてもGitは「すでに取り込み済み」と判断し、差分が0件に見えることがあります。

2. まずやる調査(Gitコマンドで事実確認)

GUIだけで悩まず、CLIで現状を正確に把握するのが解決への近道です。

2.1 ブランチとリモートの最新化

まず情報を最新にします。

git status -sb
git remote -v
git fetch --all --prune

2.2 先端コミットの確認

マージ先(例: develop)とマージ元(例: feature/...)がどこにいるか確認します。

# マージ先 (base)
git show -s --oneline --decorate origin/develop

# マージ元 (compare)
git show -s --oneline --decorate "origin/feature/add-new-feature"

2.3 ahead/behind を数値で確認【最重要】

どっちがどれだけ進んでいるか(または遅れているか)を数値で出します。

# 構文: git rev-list --left-right --count <base>...<compare>
git rev-list --left-right --count origin/develop..."origin/feature/add-new-feature"

出力結果の見方(例: 5 0 の場合)

  • 左の数値develop 側にしかないコミット数
  • 右の数値feature 側にしかないコミット数
パターン 判定
右が 0 feature 側に新しいコミットがありません。PR差分は出ません
左が大きく、右が 0 featuredevelop より古いです(behind)。develop から派生し直すか、rebase/merge が必要です。
両方に数値あり 正常です。差分が出るはずです(※コンフリクトの可能性はあります)。

2.4 履歴の可視化

グラフ構造を見て、マージや revert の線を確認します。

git log --oneline --decorate --graph --all -n 30

3. 状況別の解決策

3.1 PRの base / compare 選択ミス

GitHub画面で逆に選択していることがあります。

  • base:マージ先(変更を取り込む親。例:develop
  • compare:マージ元(変更した作業ブランチ。例:feature/...

3.2 「develop を main/master から作ったはずなのに差分0」問題

原因develop ブランチを作成する際、誤って古いブランチから派生させた/ローカルの develop が汚れていた可能性があります。

対処:ローカルの develop を正しく作り直して強制同期します。
※注意:チームで develop を共有している場合、force push は他メンバーに影響するため、合意の上で行ってください。

# master(main) を正として develop を再作成する例(環境に合わせて master/main を読み替え)
git checkout master
git pull origin master
git branch -D develop
git checkout -b develop

# 注意して実行
git push -f origin develop

3.3 「過去にマージ済み」なのでPR差分が0

原因:その変更はすでに base に取り込まれています。GitはコミットIDで履歴を管理しているため、同じコミットを再度PRしても差分は出ません。

対処法

  • 機能追加が必要なら、**新しいコミット(変更)**を積む
  • どうしても同じ内容を再適用したいなら、revert の revertcherry-pick を行う(後述)

3.4 「revert された変更を“そのまま復活”させたい」

一度マージしたが不具合などで revert(取り消し)し、修正して再度出したい場合などが該当します。

方法:revertコミットをさらに revert する(revert の revert)

base側(例:develop)に「打ち消しコミット」が存在する場合、その打ち消しをさらに打ち消すことで変更を復活させます。

# baseに合わせてブランチ作成
git checkout develop
git pull origin develop
git checkout -b reapply-feature-onto-develop

# <revert_commit_hash> は git log で確認した「打ち消しコミット」のハッシュ
git revert <revert_commit_hash>

# PushしてPR作成
git push -u origin HEAD

GitHubで base: develop / compare: reapply-feature-onto-develop でPRを作成します。

3.5 「revertコミットが入っていない別ブランチに入れたい」

履歴が複雑な場合や、revert履歴のない別のリリースブランチに入れたい場合は cherry-pick が確実です。

# ターゲットブランチへ移動
git checkout <target_branch>
git pull origin <target_branch>

# 作業用ブランチ作成
git checkout -b port-feature-onto-<target>

# 必要なコミットだけをつまみ食い(適用)
git cherry-pick <commit_hash>

# PushしてPR
git push -u origin HEAD

4. 補足:Push時に「src refspec ... does not match any」が出る場合

代表的なエラー:

error: src refspec ... does not match any

主な原因は以下の2つです。

  • ローカルにそのブランチ名が存在しない(タイプミス含む)
  • コミットが一つもなく、ブランチの実体が作られていない

解決策:

# 現在のブランチ名を再確認
git branch

# ブランチ名を指定せず、今いるブランチを確実にPushする(推奨)
git push -u origin HEAD

# ブランチ名を明示してPushする
git push -u origin <正しいブランチ名>

5. 迷ったときの「判断フロー」簡易版

  1. 実行:
git rev-list --left-right --count base...compare
  1. 判定:
  • 右側の数値が 0 → compare側に新しい変更がありません。PR差分は出ません
  1. 理由の特定と対策:
  • 既にマージ済み/revert済みで「復活」したい → revert の revert
  • 特定の変更だけ適用したい → cherry-pick
  • Pushで詰まったら → git push -u origin HEAD を試す
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?