git diff antara dua file berbeda

111

Di HEAD(komit terbaru), saya memiliki file bernama foo. Di pohon kerja saya saat ini, saya mengganti namanya menjadi bar, dan juga mengeditnya.

Saya ingin git diff foomasuk HEAD, dan bardi pohon kerja saya saat ini.

MiJyn
sumber
64
Saya pikir pertanyaan ini (dari judul) mungkin tentang menggunakan git diff pada dua file yang belum tentu ada di repo. Saya menemukan bahwa flag --no-index adalah untuk itu, misalnya git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff menyoroti perubahan berdasarkan kata, bukan hanya baris, yang sangat berguna untuk teks panjang).
Tepuk

Jawaban:

135

Tentukan jalur secara eksplisit:

git diff HEAD:full/path/to/foo full/path/to/bar

Lihat --find-renamesopsi di git-diff dokumen .

Kredit: twaggs .

Steven Wexler
sumber
9
Saya ingin menyebutkan, bahwa Anda dapat membandingkan dua file menggunakan git diff <path> <path>bahkan jika mereka tidak ada dalam repositori git.
mitenka
1
@mitenka Saya rasa itu tidak benar. Jika Anda perhatikan, git diff --helpAnda akan melihat bahwa satu-satunya pola yang didukung untuk dua file adalah git diff [<options>] --no-index [--] <path> <path>. git diff a bhanya cocok dengan pola komit, bukan file.
Doug
@Doug Berikut adalah kutipan dari perintah bantuan yang Anda sebutkan, git-scm.com/docs/git-diff : Tampilkan [...] perubahan antara dua file pada disk.
mitenka
@mitenka bantuan mengatakan, kecuali jika Anda menggunakan '--no-index' itu tidak membandingkan file; komentar Anda harus menjadi jawaban terpisah; itu tidak benar dan tidak relevan dengan jawaban ini.
Doug
1
@Doug Terima kasih atas pendapat Anda. Berikut kutipan dari bantuan yang Anda rujuk: Anda dapat menghilangkan --no-indexopsi saat menjalankan perintah di pohon kerja yang dikendalikan oleh Git dan setidaknya salah satu titik jalur di luar pohon kerja, atau saat menjalankan perintah di luar pohon kerja yang dikendalikan oleh Git .
mitenka
78

Saya yakin menggunakan --no-indexadalah apa yang Anda cari:

git diff [<options>] --no-index [--] <path> <path>

seperti yang disebutkan di manual git:

Formulir ini untuk membandingkan dua jalur yang diberikan pada sistem file. Anda dapat menghilangkan satu --no-indexpilihan ketika menjalankan perintah di pohon bekerja dikendalikan oleh Git dan setidaknya salah satu jalur poin di luar pohon bekerja, atau ketika menjalankan perintah luar pohon bekerja dikendalikan oleh Git.

mh sattarian
sumber
1
@swe ini jelas merupakan jawaban yang berguna, tetapi OP secara khusus menyatakan file tersebut dalam HEAD, yang berarti ada dalam indeks git. Jawaban yang diterima langsung menjawab pertanyaan itu. Juga jawaban yang diterima memiliki awal 6 tahun;)
Michael Delgado
3
Ini mungkin tidak membantu OP, tapi itulah yang saya cari.
thislooksfun
Ini menjawab pertanyaan yang diposting oleh judul, jika Anda merunduk untuk ini di web.
Merlin
3

Jika Anda menggunakan tortoise git, Anda dapat mengklik kanan pada file dan melakukan git a diff dengan: Klik kanan pada file pertama dan melalui submenu tortoisegit pilih "Diff later" Kemudian pada file kedua Anda juga dapat mengklik kanan ini , buka submenu tortoisegit lalu pilih "Diff dengan namafilandadi sini.txt"

camjocotem.dll
sumber
-12

Menggunakan PhpStorm, saya hanya menyalin kode komit prev dan membandingkannya dengan versi saat ini menggunakan alat "bandingkan dengan clipboard" bawaan.

Stevie Wonder
sumber
5
PhpStorm adalah IDE komersial. Pertanyaan ini adalah tentang bagaimana melakukan ini di dalam git cli itu sendiri, tanpa praduga perangkat lunak tambahan.
Charles Taylor