514

一部の Git コマンドはコミット範囲を取り、1 つの有効な構文は 2 つのコミット名を 2 つのドット..で区切るもので、別の構文は 3 つのドットを使用します...

2つの違いは何ですか?

4

4 に答える 4

287

logコマンドを使用しているか、コマンドを使用しているかによって異なりますdiff。このlog場合、それはman git-rev-parseドキュメントにあります:

到達可能なコミットをコミットから除外するには、プレフィックス^表記を使用します。たとえば、^ r1 r2は、r2から到達可能なコミットを意味しますが、r1から到達可能なコミットは除外します。

この設定操作は頻繁に表示されるため、省略形があります。2つのコミットr1とr2(上記のリビジョンの指定で説明されている構文に従って名前が付けられている)がある場合、「^ r1 r2」によってr1から到達可能なコミットを除いて、r2から到達可能なコミットを要求できます。 「r1..r2」。

同様の表記「r1...r2」は、r1とr2の対称差と呼ばれ、「r1 r2 --not $(git merge-base --all r1r2)」として定義されます。これは、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場合、これはagit diff A Bと同じであり、AとBを比較するだけです。このlog場合、Bにはあるが、Aにはないすべてのコミットが表示されます。

于 2009-01-20T20:46:40.960 に答える
7

これは少し紛らわしいです = したがって、このフローの実際の様子は次のとおりです

      A---B---C topic
     /
D---E---F---G master

https://github.com/alexcpn/gitdiffs/pull/2/commits https://github.com/alexcpn/gitdiffs/pull/1/commits

Git ログの動作

1 > git log --oneline --graph topic...main
* 9411a8b (HEAD -> メイン) G
* 3a567aa F
* aad429f (トピック) C
* 6b1eb5a B
* d65c129 A
トピック
D
E
A
B
C
メイン
D
E
F
G
トピックとメインで、ただし
両方ではありません
2 git log --oneline --graph main...topic
* 9411a8b (HEAD -> メイン) G
* 3a567aa F
* aad429f (トピック) C
* 6b1eb5a B
* d65c129 A
トピック
D
E
A
B
C
メイン
D
E
F
G
同上
3 git log --oneline --graph topic..main
* 9411a8b (HEAD -> メイン) G
* 3a567aa F
トピック
D
E
A
B
C
メイン
D
E
F
G
メインではあるが、トピックではありません
4 git log --oneline --graph main..topic
* aad429f (トピック) C
* 6b1eb5a B
* d65c129 A
トピック
D
E
A
B
C
メイン
D
E
F
G
トピックではあるがメインではない

Git 差分の動作

1 git diff topic..main
D
E
-A
-B
-C
+F
+G
トピック
D
E
A
B
C
メイン
D
E
F
G
トピック
と比較して主要なもの
2 git diff main..topic
D
E
-F
-G
+A
+B

+C
トピック
D
E
A
B
C
メイン
D
E
F
G
メイン
と比較してトピックに含まれるもの トピックに含まれないもの
3 git diff main...topic
D
E (ここに改行が入るかもしれません)
+A
+B
+C
トピック
D
E
A
B
C
メイン
D
E
F
G
トピックではあるがメインではない
4 git diff トピック...メイン
D
E
+F
+G
トピック
D
E
A
B
C
メイン
D
E
F
G
メインではあるが、トピックではありません
于 2021-03-09T08:54:08.880 に答える