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/master
git diff
C
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/develop
featureX
origin/featureX
1持っていない場合はgitk
、次を試してください。
$ git log --graph --boundary ...origin/master
(または'...@{u}'
上記のとおり)。--boundary
マージコミットを含める必要があります。追加することもでき--oneline --decorate
ます。
2実際gitk
には、脚注 1 のコマンドと同様に、マージ コミットも表示されます。つまり--boundary
、ミーティング ポイント コミットを含めるために使用します (これはマージ ベースとまったく同じではありませんが、十分に近いものです)。
3これは、マージ ベース コミットが 1 つだけあることを前提としています。これらの場合、それは真実であるべきです。そこで、上流の分岐の先頭にあるツリーと forgit diff
のツリーを比較します。おそらく恣意的な長いドライブで彼らが訪れた中間点に関係なく、「彼らがいた場所」と「彼らがたどり着いた場所」を比較します。:-) たとえば、commitでファイルを追加してから commitで再度削除すると、そのファイルは表示されません。C
G
F
this/that
G