GitHub:行のコメントが outdated になる・差分に無い理由
プルリクの行へのコメントは、あるコミット(commit_id)と、そのコミットでのファイルの行に付きます。GitHub のコメントを作る API の文書は、最新のコミットに付けないと、後のコミットがその行を変えたときに outdated になることがあると書いています。GraphQL の API は、そうなったレビューのスレッドに isOutdated(新しい変更で outdated になった)を立てます。コメントは消えません。GitHub は、付けたときのコミットと行を残しています(2026年10月26日に確認)。
query {
repository(owner: "持ち主", name: "リポジトリ名") {
pullRequest(number: 番号) {
reviewThreads(first: 100) {
nodes { path isOutdated isResolved line originalLine diffSide subjectType }
}
}
}
}
GitHub が残している物
- REST(
GET /repos/持ち主/リポジトリ名/pulls/番号/comments):コメントごとにcommit_idとoriginal_commit_id、lineとoriginal_line(範囲ならstart_lineとoriginal_start_lineも)、sideがあります。original_の付く欄が、コメントを付けたときのコミットと行です。diff_hunkは、そのときの行のまわりの差分です。差分の中の位置で行を指すpositionとoriginal_positionは廃止に向かっていて、lineとoriginal_lineが代わりです。 - GraphQL(
PullRequestReviewThread):isOutdated、line(スレッドが指すファイルの行)とoriginalLine、diffSide、それに行かファイル全体かを表すsubjectType。コメント(PullRequestReviewComment)ごとにはoutdated・commit・originalCommitがあります。 - 差分ではなくファイルの行:元の行番号は、元のコミットでのファイルの行です。今のファイルでは、同じ番号の行に別のコードがあるか、ファイルがそこまで無いこともあります。
outdated の会話が出る所
- github.com では:「Files changed」のタブの Conversations のメニューに、未解決・解決済み・outdated の会話が出ます(GitHub のプルリクへのコメントの文書)。
- outdated と解決済みは別:GraphQL でも
isOutdatedとisResolvedは別の印です。解決した会話は折りたたまれます。解決できるのは、プルリクを開いた人か、リポジトリに書き込める人です(会話が解決できなかった理由)。
今の差分に出ない理由
- 行が変わった:コメントは outdated で、その場所は元のコミットの元の行です。
- ファイルが変更ファイルから外れた:後のコミットがそのファイルの変更を元に戻すと、プルリクの差分からそのファイルが消えます。コメントはパスを持ったままです。
- ファイル全体へのコメント(
subject_typeがfile)には、出す行がありません。 - 消された:消されたコメントを読むと 404(消すときの答えは 204)。最初のコメントが消されたスレッドへの返信も 404 です(コメントや返信が断られた理由)。
直し方
- コメントが指したコードを見る:
original_commit_idでのファイル(GET /repos/持ち主/リポジトリ名/contents/パス?ref=SHA、または github.com のそのコミット)のoriginal_line行目。diff_hunkに、そのときのまわりの行があります。 - 今のコードにコメントする:先頭のコミットを
commit_idにして、今の差分の行に新しくコメントします(行へのコメントが断られた理由)。 - 済んだら:後のコミットで片付いたなら、会話を解決します。
IntelliJ IDEA の OUTDATED の札は GitHub の物で、IDE は古い行をコミットをたどって追う
IntelliJ IDEA に入っている GitHub の機能が、古くなったレビューのスレッドをどう扱うか。ソース(2026年10月31日に確認・IntelliJ IDEA:pullRequestReviewThread.graphql・GHPullRequestReviewThread.kt・GHPRTimelineThreadViewModel.kt・GHPRTimelineThreadComponentFactory.kt・GHPRThreadsViewModels.kt・CollaborationToolsBundle.properties)では:
- 読む物:スレッドごとに GitHub の
isOutdated・line・originalLine(範囲ならstartLineとoriginalStartLineも)と、最初のコメントのcommitとoriginalCommit。 - タイムラインでは、GitHub が
isOutdatedを真と返すときだけ、スレッドに OUTDATED の札が付きます。コードは GitHub がスレッドと一緒に保存した差分の塊(diff hunk)で、書かれた時の行(originalLine)に印が付きます。GitHub が空の塊を返すと(ソースのコメントでは、ファイル全体へのコメントと一部の古いスレッド)、コードは描きません。 - 差分とエディターでは、今の変更の中でスレッドの場所を探します。GitHub が今の
lineをcommitで返していればそれを使い、無ければoriginalCommitでのoriginalLineを、プルリクのコミットをたどって追います。そのコミットのファイルがプルリクの変更に無いときや、行を追えないときは、そこに場所を持ちません。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。行へのコメントの line を読み、今の行が付いてこないコメントは original_line と original_commit_id を読みます。「コメント」のタブでは、そのスレッドのファイルと行の横に前のコミットを書き(「その後、行が変わっています」)、ファイルの差分では、そのときの行番号に印を置き、その印の説明に、前のコミットへのコメントで今はその行に別のコードがあるかもしれないと書きます。ファイル全体へのコメントを outdated 扱いにはしません。解決済みのスレッドには、誰が解決したかを付けます。変更ファイルから外れたファイルへのコメントに移ろうとすると、そう伝えます。受信箱・差分・会話は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English