git log A..B (dua titik)
Meskipun sintaks ini terlihat seperti "rentang" komit dari A ke B, sebenarnya merupakan kependekan dari git log ^A B
:
- perlihatkan semua komitmen yang dapat dicapai dari B; B sendiri sudah termasuk
- tidak termasuk yang dapat dijangkau dari A; A sendiri dikecualikan
Jadi, berikan riwayat berikut (dengan komit tertua di sebelah kiri, yang terbaru di sebelah kanan):
*--*--*--A--*--*--*--B
git log A..B
akan menunjukkan semua komitmen di sebelah kanan A.
Catatan yang git log A..
setara dengan git log A..HEAD
.
git log A ... B (tiga titik)
Halaman manual git-rev-list menggambarkan ini sebagai notasi khusus untuk "perbedaan simetris".
Ini setara dengan git log A B --not $(git merge-base --all A B)
.
Dalam bahasa Inggris yang sederhana, ini berarti "semua komitmen yang dapat dicapai dari A atau B tetapi tidak dari keduanya.
Dot ganda
Spesifikasi rentang paling umum adalah sintaks double-dot. Ini pada dasarnya meminta Git untuk menyelesaikan serangkaian komitmen yang dapat dijangkau dari satu komit tetapi tidak dapat dijangkau dari yang lain. Misalnya, Anda memiliki riwayat komit yang terlihat seperti:
Anda ingin melihat apa yang ada di cabang percobaan Anda yang belum digabungkan ke cabang master Anda. Anda dapat meminta Git untuk menunjukkan kepada Anda log yang berisi komitmen yang dilakukan dengan master..experiment - itu berarti “semua berkomitmen dapat dicapai dengan eksperimen yang tidak dapat dijangkau oleh master.” Demi keringkasan dan kejelasan dalam contoh ini, saya akan gunakan huruf-huruf dari objek komit dari diagram menggantikan output log aktual dalam urutan yang akan ditampilkan:
$ git log master..experiment
D
C
Jika, di sisi lain, Anda ingin melihat yang sebaliknya - semua komit di master yang tidak dalam percobaan - Anda bisa membalikkan nama cabang. Eksperimen..master menunjukkan semua yang master tidak dapat dicapai dari eksperimen:
$ git log experiment..master
F
E
Ini berguna jika Anda ingin menjaga agar cabang percobaan tetap mutakhir dan melihat dulu apa yang akan Anda gabungkan. Penggunaan sintaks ini yang sering dilakukan adalah untuk melihat apa yang akan Anda push ke remote:
$ git log origin/master..HEAD
Perintah ini menunjukkan kepada Anda komit apa pun di cabang Anda saat ini yang tidak ada di cabang master pada remote asal Anda. Jika Anda menjalankan git push dan cabang Anda saat ini melacak origin / master, komit yang didaftar oleh git log origin / master..HEAD adalah komit yang akan ditransfer ke server. Anda juga dapat meninggalkan satu sisi sintaks untuk meminta Git menganggap HEAD. Misalnya, Anda bisa mendapatkan hasil yang sama seperti pada contoh sebelumnya dengan mengetikkan git log origin / master .. - Git mengganti HEAD jika satu sisi tidak ada.
Banyak Poin
Sintaks double-point berguna sebagai singkatan; tetapi mungkin Anda ingin menentukan lebih dari dua cabang untuk menunjukkan revisi Anda, seperti melihat komit di salah satu dari beberapa cabang yang tidak ada di cabang saat ini. Git memungkinkan Anda melakukan ini dengan menggunakan karakter ^ atau - bukan sebelum referensi apa pun yang Anda tidak ingin lihat komit yang dapat dijangkau. Jadi tiga perintah ini setara:
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
Ini bagus karena dengan sintaks ini Anda dapat menentukan lebih dari dua referensi dalam kueri Anda, yang tidak dapat Anda lakukan dengan sintaks double-dot. Misalnya, jika Anda ingin melihat semua komit yang dapat dijangkau dari refA atau refB tetapi tidak dari refC, Anda dapat mengetikkan salah satu dari ini:
$ git log refA refB ^refC
$ git log refA refB --not refC
Ini membuat sistem kueri revisi yang sangat kuat yang akan membantu Anda mengetahui apa yang ada di cabang Anda.
Triple Dot
Sintaks pemilihan rentang utama terakhir adalah sintaks triple-dot, yang menentukan semua komit yang dapat dijangkau oleh salah satu dari dua referensi tetapi tidak oleh keduanya. Lihat kembali contoh commit commit di:
Jika Anda ingin melihat apa yang ada di master atau percobaan tetapi tidak ada referensi umum, Anda dapat menjalankannya
$ git log master...experiment
F
E
D
C
Sekali lagi, ini memberi Anda output log normal tetapi hanya menampilkan informasi komit untuk keempat komit tersebut, muncul dalam pemesanan tanggal komit tradisional.
Peralihan umum untuk digunakan dengan perintah log dalam kasus ini adalah - kiri-kanan, yang menunjukkan Anda di sisi mana setiap komit berada. Ini membantu membuat data lebih berguna:
$ git log --left-right master...experiment
< F
< E
> D
> C
Dengan alat-alat ini, Anda dapat dengan lebih mudah memberi tahu Git tentang komitmen atau komitmen yang ingin Anda periksa.