michas の答えは、尋ねられた質問に対する正しい答えです。
古い参照、つまり のa8e5e4e部分がない場合はどうなりますa8e5e4e..295bf31 master -> origin/masterか? おそらく、あなたは実際には気にしません。彼が示唆したように、見るmaster...origin/masterことはさらに興味深いことです。1 しかし、この 3 つのドットの...構文は実際には何を意味するのでしょうか?
答えはgit rev-listドキュメントにあります:
もう 1 つの特別な表記法は<commit1>...<commit2>、マージに役立つものです。結果として得られるコミットのセットは、2 つのオペランド間の対称的な違いです。...
私が思うに、これは十分に紛らわしい言い回しです (実際にgit diffはまったく異なる意味を使用しています)。しかし、実際にはそれほど複雑ではありません。
次のように描画できるいくつかのコミットがあるとします。
master origin/master
E G
| |
D F
\ /
C
|
B
|
A
あなたが持っているのは commit での相違Cです。masterとorigin/masterの両方が を指しているときに、あなたは仕事を始めましたC。明らかに、あなたは と をコミットDしE、「彼ら」 (誰であれ) は と をコミットFしGました。Cちなみに、コミットはマージベースと呼ばれます。
master...origin/masterつまり、私を見つけて、C左側と右側の両方で、「そこから」すべてを渡してください。つまり、 と の両方のすべてのコミットでmaster あり origin/master、それらが最初に出会ったポイント以下のコミットは除外されます。
実行すると、それが表示されgitk master...origin/masterます: 2あなたが行ったすべてのコミットと、それらが行ったすべてのコミット。しかし、 を実行すると、これのほとんどが破棄されます。代わりに、右側の名前に対してマージ ベース3と diffを見つけます。git diff flags master...origin/mastergit diffC
master自分のブランチにいると仮定すると(つまり、HEAD単に「マスター」を意味します)、これをさらに短くすることができます。あなたのブランチと彼らのブランチが分岐してから変更されたファイルを確認するには、次のコマンドを実行します。
$ git diff --stat ...origin/master # or --name-status, etc
名前を省略すると を意味するHEADので、これは とHEAD...origin/master同じmaster...origin/masterです。
git が十分に新しい場合@{u}は、「現在のブランチの上流ブランチ」(つまり、 from master、 find origin/master) を参照するため、次を実行できます。
$ git diff --stat '...@{u}'
(引用符はシェルからブレースを保護するためのものです。特定のシェルでは必要な場合とそうでない場合があります)。これは、アップストリームとして使用している場合でも、アップストリームとして使用しdevelopている場合でも機能します。origin/developfeatureXorigin/featureX
1持っていない場合はgitk、次を試してください。
$ git log --graph --boundary ...origin/master
(または'...@{u}'上記のとおり)。--boundaryマージコミットを含める必要があります。追加することもでき--oneline --decorateます。
2実際gitkには、脚注 1 のコマンドと同様に、マージ コミットも表示されます。つまり--boundary、ミーティング ポイント コミットを含めるために使用します (これはマージ ベースとまったく同じではありませんが、十分に近いものです)。
3これは、マージ ベース コミットが 1 つだけあることを前提としています。これらの場合、それは真実であるべきです。そこで、上流の分岐の先頭にあるツリーと forgit diffのツリーを比較します。おそらく恣意的な長いドライブで彼らが訪れた中間点に関係なく、「彼らがいた場所」と「彼らがたどり着いた場所」を比較します。:-) たとえば、commitでファイルを追加してから commitで再度削除すると、そのファイルは表示されません。CGFthis/thatG