web-dev-qa-db-ja.com

2つのブランチのGithub比較ビューが間違っていますか?

masterと別のブランチAの間で Github比較ビュー を実行すると、Githubは、HEAD Aのバージョンと、masterの古い非ヘッドバージョンとを比較しているようです。

私はそれを調べましたが、GithubがブランチAmasterの共通の祖先と比較しているように聞こえます。実際にmasterのHEADにあるものと実際には比較していません。

GithubのHEADに対してマスターのHEADブランチAを比較する方法はありますか?

そうでない場合は、なぜですか?これは、すべての開発者ができるようにしたい機能のようです。それとも、私がおそらく行方不明になっている、実行すべきプロセスがありますか?これらの差分の1つから直接プル要求を作成できるようにしたいと思います。

EDIT:ここに問題を示すレポの例があります

https://github.com/bradparks/test_github_diff_view

  • 単一のファイルREADME.mdを含む新しいリポジトリを作成しました
  • このファイルに単一行v100が含まれるように設定します。
  • 次に、masterを新しいブランチAに分岐し、行を「v200」に変更しました
  • 次に、マスターブランチの値を「v300」に変更し、比較リンクを使用して2つのブランチを比較しました

    https://github.com/bradparks/test_github_diff_view/compare/A

    次の予期しない結果が表示されます。 v300ではなくv100と比較しないのはなぜですか?

    enter image description here

29
Brad Parks

マスターのHEADをGithubのブランチAのHEADと比較する方法はありますか?

2018年9月 :はい:GitHubは「 ドットと2ドットのGit diff比較 」を明示的にサポートするようになりました。 ここの例 を参照してください。
keisuke 言及 コメント内 a Bitbucketの同様のイニシアチブ

元の回答2015:

いいえ:「 GitHubブランチの現在のバージョンのビューの比較 」で述べたように、GitHubはトリプルドット(...)範囲のショートカット仕様のみをサポートします。
あれは:

このフォームは、両方の共通の祖先から始まる2番目までのブランチの変更を表示します。

「_git diff A...B_」は「git diff $(git-merge-base A B) B」と同等です。
のいずれか1つを省略できます。HEADを代わりに使用した場合と同じ効果があります。

公式GitHubヘルプ は、この機能を次のように言及しています。

Compareの最も一般的な使用法は、新しいプルリクエストを開始するときなど、ブランチを比較することです。

そのシナリオでは、PRブランチはmasterから始まります(または、とにかくmasterのトップにリベースする必要があります)。つまり、master HEADはmasterとPRブランチの間のベースです。

しかし、2つのブランチが分岐した場合、比較はHEADsの間ではなく、1つの共通の祖先と1つのHEADの間で行われます:git diff $(git-merge-base master B) B

注:「 Comparing commits 」に明確に記載されているように、2つのSHA1を直接指定した場合でも、stillgit diff $(git-merge-base A B) Bを実行します。
それは、not2つのコミット間で直接diffを行います。

24
VonC

ちょうど別の考え。作業とマスターブランチのヘッドとの差分からプルリクエストを作成する場合(o.p.に従って)、最初にマスターブランチから独自のブランチをリベースする必要がありますgit rebase <master>そしてプル要求を行います。

ただし、通常はこれを行う必要はありません。Gitはマージに非常に優れており、通常、リベースしなくても、追加したいとおりにマスターブランチに作業を追加できます。

1
Mike Beaton

マスターのHEADをGithubのブランチAのHEADと比較する方法はありますか?

[[〜#〜] edit [〜#〜]:いいえ、間違っていました。私が管理したURLは正しいことをしているように見え、ページの差分は正しく見えましたが、それは偶然でした。もっと詳しく知りたい場合は、この回答の履歴を確認してください。]

1
leoger