Apa perbedaan antara perintah berikut ?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Manual diff membicarakannya:
Membandingkan cabang
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Perubahan antara ujung topik dan cabang master.
- Sama seperti di atas.
- Perubahan yang terjadi pada cabang master sejak saat cabang topik dimulai.
tetapi tidak sepenuhnya jelas bagi saya.
..
dan...
dalamgit diff
dan artinya yang berbedagit log
.Jawaban:
Karena saya sudah membuat gambar-gambar ini, saya pikir mungkin ada gunanya menggunakannya dalam jawaban lain, meskipun deskripsi perbedaan antara
..
(titik-titik) dan...
(titik-titik-titik) pada dasarnya sama dengan jawaban manojlds .Perintah
git diff
biasanya¹ hanya menunjukkan kepada Anda perbedaan antara status pohon antara tepat dua titik dalam grafik komit. The..
dan...
notasi digit diff
memiliki arti sebagai berikut:Dengan kata lain,
git diff foo..bar
persis sama dengangit diff foo bar
; keduanya akan menunjukkan kepada Anda perbedaan antara ujung kedua cabangfoo
danbar
. Di sisi lain,git diff foo...bar
akan menunjukkan kepada Anda perbedaan antara "basis gabungan" dari dua cabang dan ujungbar
. "Basis penggabungan" biasanya merupakan komit terakhir yang sama di antara kedua cabang tersebut, jadi perintah ini akan menunjukkan kepada Anda perubahan yangbar
telah diperkenalkan pada pekerjaan Anda , sementara mengabaikan semua yang telah dilakukan padafoo
waktu yang bersamaan.Itu semua yang perlu Anda ketahui tentang
..
dan...
notasi digit diff
. Namun...... sumber kebingungan yang umum di sini adalah hal itu
..
dan...
berarti hal-hal yang agak berbeda ketika digunakan dalam perintah sepertigit log
yang mengharapkan serangkaian commit sebagai satu atau lebih argumen. (Semua perintah ini pada akhirnya digunakangit rev-list
untuk mengurai daftar commit dari argumen mereka.)Arti dari
..
dan...
untukgit log
dapat ditampilkan secara grafis seperti di bawah ini:Jadi,
git rev-list foo..bar
menunjukkan kepada Anda segala sesuatu di cabangbar
yang tidak juga di cabangfoo
. Di sisi lain,git rev-list foo...bar
menunjukkan semua komitmen yang ada di salah satufoo
ataubar
, tetapi tidak keduanya . Diagram ketiga hanya menunjukkan bahwa jika Anda membuat daftar dua cabang, Anda mendapatkan komit yang ada di salah satu atau keduanya.Yah, bagaimanapun juga saya merasa sedikit membingungkan, dan saya pikir diagram graph commit membantu :)
¹ Saya hanya mengatakan "biasanya" karena ketika menyelesaikan konflik gabungan, misalnya,
git diff
akan menunjukkan kepada Anda gabungan tiga arah.sumber
git diff
diagram saya sendiri yang akan saya buat nanti...
dan...
nuansa terbalik digit diff
(dibandingkan dengangit rev-list
)!git diff foo..bar
persis sama dengangit diff foo bar
; keduanya akan menunjukkan kepadamu perbedaan antara ujung dua cabang foo dan bar." Apa sebenarnya yang Anda maksud dengan "perbedaan antara ujung kedua cabang"?Versi gabungan saya dari .. vs ... dengan diff vs log
sumber
..
/...
barang. Sebagai contoh dilog A...B
dalamnya tidak jelas apakah perintah mengembalikan persimpangan (bagian putih diagram) atau sisa dari persatuan AB (hijau). Ini akan lebih ke titik tanpa operan dan hanya 1 warna.diff A..B
<->log A...B
, yaitu, tidak benar-benar diff dengan 2 titik, sesuai dengan log dengan 3 titik (!)? Atau apakah ada kesalahan ketik pada gambar. Melihat bagaimana titik-titik diberi kode warna, menurut saya ada kesalahan ketik pada gambar. Pojok kiri bawah:log A...B
seharusnyalog A..B
, kanan (?). Dan login hanya ke kanan seharusnya...
tidak..
.git diff foo master
Beda komit atas dan kepala dari foo dan master.git diff foo..master
Cara lain melakukan hal yang sama.git diff foo...master
Berbeda dari leluhur (git merge-base foo master
) foo dan master pada ujung master. Dengan kata lain, hanya menunjukkan perubahan yang diperkenalkan cabang master sejak nenek moyang yang sama dengan foo.Contoh dari GitHub ini menjelaskan kapan harus menggunakan keduanya:
sumber
akan menunjukkan perbedaan antara topik dan cabang utama pada saat itu
ini juga akan menunjukkan perbedaan antara topik dan cabang utama pada titik waktu tersebut
ini akan menunjukkan semua perbedaan antara saat topik dibuat dari cabang dan setelah
jadi 2 perintah pertama adalah sama dan yang terakhir hanya menunjukkan tampilan yang lebih luas dalam sejarah diff
sumber
Gambar atas setara dengan pohon grafik bawah
Sebuah gambar bernilai ribuan kata, perbedaannya
..
...
^
ditunjukkan di bawah ini.sumber