前提・実現したいこと
GitHubにて特定の条件を満たしてPullRequestを作成すると、存在しないはずの差分が表示されます。
git diffでは差分がないにもかかわらず、です。
どうしてこのような差分が表示されるのか、どなたか解説をいただけないでしょうか。
再現条件
- 新規リポジトリにmasterブランチとして最初のcommit, pushを行う
- masterからbranch1,branch2を作成
- branch1に修正を加え、commit, push
- branch1の修正をbranch2にマージ
- masterに修正を加え、commit, push
- masterの修正をbranch1, branch2にマージ
- 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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
こんにちは。
自分も今調べて理解したんですが、GitHub の File changed はマージ対象ブランチが「分岐点以降に積み上げた差分」を表示していますね。
つまり、git diff branch2...branch1
の結果です。
期待されていたのは git diff branch2..branch1
の結果だと思いますが、それを表示したいのであれば、マージ対象ブランチ上でマージ先ブランチを逆方向にマージしておくのがよくあるやり方ですね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/11/16 10:32
お恥ずかしながらトリプルドットを今回初めて知りました。
理由について完全に理解することができました。
また、理解できていなかったながら現場の運用ノウハウとして、逆方向マージをしておくと差分の表示が良好なものになる、という知見もあったのですが、理由についてははっきりしていなくモヤモヤしていました。
今回のご指摘で自信を持って逆マージすることができますね。
完璧なご回答ありがとうございました!