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

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

新規登録して質問してみよう
ただいま回答率
85.45%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

1回答

11745閲覧

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

jkneko

総合スコア27

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

0クリップ

投稿2020/11/15 07:26

編集2020/11/15 07:35

前提・実現したいこと

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

行った操作

bash

1git clone git@github.com:jkneko/MysteriousDifferences 2cd MysteriousDifferences 3 4# Masterのイニシャルコミットを作る 5for a in {1..10} 6do 7 echo $a 8done > README.txt 9 10git add README.txt 11git commit -am init 12git push origin master 13 14# Masterからブランチ1,2を作る 15git checkout -b branch1 16git push origin branch1 17git checkout master 18git checkout -b branch2 19git push origin branch2 20 21# ブランチ1に修正を入れる 22git checkout branch1 23gsed -i 's/3/333/' README.txt 24git commit -am 'cahnge to 333 from 3' 25git push origin branch1 26 27# ブランチ1の修正をブランチ2に反映 28git checkout branch2 29git pull origin branch1 30git push origin branch2 31 32# Masterに修正を入れる 33git checkout master 34gsed -i 's/5/555/' README.txt 35git commit -am 'cahnge to 555 from 5' 36git push origin master 37 38# masterの修正をブランチ1,2にマージ 39git checkout branch1 40git pull origin master 41git push origin branch1 42 43git checkout branch2 44git pull origin master 45git push origin branch2 46 47# ・ブランチ1をブランチ2にマージ というPRを作る 48# すると謎の差分が表示される 49 50

git diff の実行結果

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

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

投稿2020/11/16 00:04

tamoto

総合スコア4128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jkneko

2020/11/16 01:32

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問