一部のGitコマンドはコミット範囲を使用し、1つの有効な構文は2つのコミット名を2つのドット..
で区切るもので、別の構文は3つのドット...
を使用します。
2つの違いは何ですか?
log
コマンドを使用しているか、diff
コマンドを使用しているかによって異なります。 log
の場合、man git-rev-parse
のドキュメントにあります:
コミットから到達可能なコミットを除外するには、プレフィックス^表記が使用されます。例えば。 ^ r1 r2は、r2から到達可能なコミットを意味しますが、r1から到達可能なコミットは除外します。
この集合演算は非常に頻繁に現れるため、省略形があります。 2つのコミットr1およびr2(上記の改訂の説明で説明されている構文に従って命名された)がある場合、r1から到達可能なコミットを「^ r1 r2」で到達できるものを除いて要求できます。 「r1..r2」。
同様の表記「r1 ... r2」はr1とr2の対称差と呼ばれ、「r1 r2 --not $(git merge-base --all r1 r2)」と定義されます。 r1またはr2のいずれかからは到達できますが、両方からは到達できないコミットのセットです。
これは基本的に、2つのブランチのいずれかであり、両方ではないすべてのコミットを取得することを意味します。
diff
の場合、man git-diff
のドキュメントにあります:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
これは少しあいまいです。基本的には、別のブランチと比較してそのブランチの違いのみを表示することを意味します。最初にコミットした最後の共通コミットを探し、2番目のコミットをそれに差分します。このブランチと比較して、このブランチで行われた変更を簡単に確認できます。このブランチの変更のみに気付くことはありません。
..
はやや単純です:git-diff
の場合、git diff A B
と同じであり、AをBと比較します。log
の場合、 Bにありますが、Aにはありません。
..
や...
とともにgit log
などのコミット範囲を使用している場合、それらの違いは、ブランチAとBの場合、
git log A..B
Bが持っているコミットのうち、Aが持っていないすべてのコミット
git log A...B
both Aが持っているコミットとBが持っていないコミット、およびBが持っているコミットがAを持っていないコミット、または言い換えれば、AとBの両方が共有するすべてのコミットをフィルターで除外するため、両方が共有しないコミットのみを表示する 。
以下は、git log A..B
の視覚的表現です。 Aに存在しないブランチBに含まれるコミットは、コミット範囲によって返され、ベン図では赤で強調表示され、コミットツリーでは青で囲まれています。
これらは、git log A...B
の図です。両方のブランチによるsharedであるコミットは、コマンドによって返されないことに注意してください。
...
の有用性の向上...
オプションを使用して、どのコミットがどのブランチに属しているかを表示することにより、ログコマンドでトリプルドットコミット範囲--left-right
をより便利にすることができます。
$ git log --oneline --decorate --left-right --graph master...Origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (Origin/master, Origin/HEAD) Add hello.txt
上記の出力では、master
に属するコミットの先頭に<
が付けられ、Origin/master
に属するコミットの先頭に>
が付けられています。
いつか、コミット範囲がgit diff
でどのように機能するかについて独自の説明を追加するかもしれませんが、今のところ、あなたはチェックアウトしたいかもしれません 二重ドット「..」と三重ドットの違いは何ですか? Git diffコミット範囲の「...」? 。