Beberapa perintah Git mengambil rentang komit dan satu sintaks yang valid adalah untuk memisahkan dua nama komit dengan dua titik ..
, dan sintaks lain menggunakan tiga titik ...
.
Apa perbedaan antara keduanya?
Beberapa perintah Git mengambil rentang komit dan satu sintaks yang valid adalah untuk memisahkan dua nama komit dengan dua titik ..
, dan sintaks lain menggunakan tiga titik ...
.
Apa perbedaan antara keduanya?
Jawaban:
Itu tergantung pada apakah Anda menggunakan log
perintah atau diff
perintah. Dalam hal log
ini, ada dalam man git-rev-parse
dokumentasi:
Untuk mengecualikan komit yang dapat dijangkau dari komit, notasi awalan digunakan. Misalnya ^ r1 r2 berarti komit yang dapat dijangkau dari r2 tetapi mengecualikan yang dapat dijangkau dari r1.
Operasi set ini sering muncul sehingga ada singkatan untuknya. Ketika Anda memiliki dua commit r1 dan r2 (dinamai sesuai dengan sintaks yang dijelaskan dalam SPESIFIKASI REVISI di atas), Anda dapat meminta komit yang dapat dijangkau dari r2 tidak termasuk komit yang dapat dijangkau dari r1 dengan "^ r1 r2" dan dapat ditulis sebagai "r1..r2".
Notasi serupa "r1 ... r2" disebut selisih simetris r1 dan r2 dan didefinisikan sebagai "r1 r2 --not $ (git merge-base --all r1 r2)". Ini adalah himpunan komit yang dapat dijangkau dari salah satu dari r1 atau r2 tetapi tidak dari keduanya.
Yang pada dasarnya berarti bahwa Anda akan mendapatkan semua komitmen yang ada di salah satu dari dua cabang, tetapi tidak di keduanya.
Dalam hal diff
ini, ada dalam man git-diff
dokumentasi:
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.
Yang agak kabur. Pada dasarnya itu berarti hanya menunjukkan perbedaan di cabang itu dibandingkan dengan cabang lain: mencari komit umum terakhir dengan komite pertama yang Anda berikan, dan kemudian berbeda komit kedua dengan itu. Ini adalah cara mudah untuk melihat perubahan apa yang dibuat di cabang itu, dibandingkan dengan cabang ini, tanpa memperhatikan perubahan di cabang ini saja.
Ini ..
agak sederhana: Dalam git-diff
kasus ini, itu sama dengan a git diff A B
dan hanya beda A terhadap B. Dalam log
kasus ini, itu menunjukkan semua komit yang ada di B tetapi tidak di A.
..
dan ...
persis ditukar untuk log dan diff: log A..B
adalah perubahan dari gabungan basis menjadi B yang diff A...B
artinya
git diff
.
A...B
== A..B + B..A
?
git log
ini benar-benar ya
Saat Anda menggunakan rentang komit seperti ..
dan ...
dengan git log
, perbedaan di antara mereka adalah, untuk cabang A dan B,
git log A..B
akan menunjukkan kepada Anda semua komitmen yang B miliki yang tidak dimiliki A , sementara
git log A...B
akan menunjukkan kepada Anda kedua komit yang dimiliki A dan B tidak ada, dan komit bahwa B memiliki komit A, atau dengan kata lain, itu akan menyaring semua komit yang dimiliki A dan B, dengan demikian hanya menunjukkan komitmen yang tidak mereka bagikan .
Berikut ini adalah representasi visual dari git log A..B
. Komit yang berisi cabang B yang tidak ada di A adalah apa yang dikembalikan oleh rentang komit, dan disorot dalam warna merah di diagram Venn, dan dilingkari dengan warna biru di pohon komit:
Ini adalah diagram untuk git log A...B
. Perhatikan bahwa komit yang dibagikan oleh kedua cabang tidak dikembalikan oleh perintah:
...
Lebih BergunaAnda bisa membuat rentang komit tiga-titik ...
lebih berguna dalam perintah log dengan menggunakan --left-right
opsi untuk memperlihatkan komit yang dimiliki cabang mana:
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
Dalam output di atas, Anda akan melihat komit yang dimiliki master
diawali dengan <
, sementara komit yang milik origin/master
awalan dengan >
.
Suatu hari saya mungkin menambahkan penjelasan saya sendiri tentang bagaimana rentang komit bekerja dengan git diff
, tetapi untuk sekarang, Anda mungkin ingin memeriksa Apa perbedaan antara titik-ganda ".." dan titik-tiga "..." di Git diff commit rentang? .