質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.37%

GitHubのPullRequestに謎の差分が表示される

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 234

jkneko

score 27

前提・実現したいこと

GitHubにて特定の条件を満たしてPullRequestを作成すると、存在しないはずの差分が表示されます。
git diffでは差分がないにもかかわらず、です。
どうしてこのような差分が表示されるのか、どなたか解説をいただけないでしょうか。

イメージ説明

再現条件

  1. 新規リポジトリにmasterブランチとして最初のcommit, pushを行う
  2. masterからbranch1,branch2を作成
  3. branch1に修正を加え、commit, push
  4. branch1の修正をbranch2にマージ
  5. masterに修正を加え、commit, push
  6. masterの修正をbranch1, branch2にマージ
  7. branch1からbranch2へのPull Requestを作成

この時、GitHub上のPullRequestには手順3の修正が差分として表示されてしまうのです。
手順4でマージ済みで、Pull Request作成時はbranch1とbranch2に差分はありません。

上記操作を行い、再現させた状態のリポジトリも用意してみました。
https://github.com/jkneko/MysteriousDifferences

謎の差分が表示されるPullRequest。
https://github.com/jkneko/MysteriousDifferences/pull/1

行った操作

git clone git@github.com:jkneko/MysteriousDifferences
cd MysteriousDifferences

# Masterのイニシャルコミットを作る
for a in {1..10}
do
    echo $a
done > README.txt

git add README.txt
git commit -am init
git push origin master

# Masterからブランチ1,2を作る
git checkout -b branch1
git push origin branch1
git checkout master
git checkout -b branch2
git push origin branch2

# ブランチ1に修正を入れる
git checkout branch1
gsed -i 's/3/333/' README.txt
git commit -am 'cahnge to 333 from 3'
git push origin branch1

# ブランチ1の修正をブランチ2に反映
git checkout branch2
git pull origin branch1
git push origin branch2

# Masterに修正を入れる
git checkout master
gsed -i 's/5/555/' README.txt
git commit -am 'cahnge to 555 from 5'
git push origin master

# masterの修正をブランチ1,2にマージ
git checkout branch1
git pull origin master
git push origin branch1

git checkout branch2
git pull origin master
git push origin branch2

# ・ブランチ1をブランチ2にマージ というPRを作る
# すると謎の差分が表示される

git diff の実行結果

$ git checkout branch2
Switched to branch 'branch2'
$ git diff branch1
$

Git feature flowという取り回し方法で運用していると、このパターンが多く発生し困っておりまして。
どなたかアドバイスをいただけますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

自分も今調べて理解したんですが、GitHub の File changed はマージ対象ブランチが「分岐点以降に積み上げた差分」を表示していますね。
つまり、git diff branch2...branch1 の結果です。
期待されていたのは git diff branch2..branch1 の結果だと思いますが、それを表示したいのであれば、マージ対象ブランチ上でマージ先ブランチを逆方向にマージしておくのがよくあるやり方ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/11/16 10:32

    ご回答ありがとうございます!
    お恥ずかしながらトリプルドットを今回初めて知りました。
    理由について完全に理解することができました。

    また、理解できていなかったながら現場の運用ノウハウとして、逆方向マージをしておくと差分の表示が良好なものになる、という知見もあったのですが、理由についてははっきりしていなくモヤモヤしていました。
    今回のご指摘で自信を持って逆マージすることができますね。
    完璧なご回答ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る