git diff dua file di cabang yang sama, komit yang sama

97

maaf jika pertanyaan ini ada, secara mengejutkan saya tidak dapat menemukannya: /

Bagaimana saya bisa melakukan di git diffantara dua file dalam cabang yang sama & komit yang sama?

yaitu git diff fileA.php fileB.php

(idealnya dengan kode warna yang mudah dibaca yang gitmenawarkan .... atau serupa dengan apa yang dilakukan program BeyondCompare!)

d -_- b
sumber
Catatan: Git: Bagaimana cara membedakan dua file berbeda dalam komit yang berbeda? sedikit lebih umum daripada pertanyaan ini, tetapi jawabannya pada dasarnya sama dengan jawaban yang benar untuk pertanyaan ini , dan tidak semua jawaban palsu tersebut, jadi saya telah memilih untuk menutup ini sebagai penipu.
SamB

Jawaban:

84

Anda tidak perlu git untuk itu, cukup gunakan diff fileA.php fileB.php(atau vimdiff jika Anda ingin perbandingan berdampingan)

JaredMcAteer
sumber
22
vimdiffUntuk kemenangan! Terima kasih!
d -_- b
24
Ini mungkin berhasil, tetapi bukan git diff. Ini adalah format keluaran yang sama sekali berbeda.
daboross
11
Ini tidak menjawab pertanyaan asli
DylanYoung
8
Saya tidak setuju, OP tidak jelas tetapi fakta bahwa dia menyebutkan BeyondCompare menyiratkan bahwa dia tidak secara khusus mencari git difftetapi hanya diff yang mudah dibaca. Juga fakta bahwa dia menerima jawaban saya sebagai apa yang dia cari juga menunjukkan bahwa itu memang menjawabnya.
JaredMcAteer
3
baca jawabannya dengan cermat. perintahnya diff fileA fileBbukangit diff fileA fileB
Matthew Hinea
247

Jika Anda ingin menggunakan git diffdua file arbitrer, Anda dapat menggunakan git diff --no-index <file_a> <file_b>. Kedua file tersebut tidak perlu dilacak gitagar dapat bekerja.

rzrgenesys187
sumber
32
+1 karena menjawab pertanyaan awal (terlepas dari "mengapa Anda melakukan itu" ... mungkin ada alasannya)
NobodysNightmare
19
--word-diffmenyoroti perubahan berdasarkan kata, bukan hanya baris
pengguna3148949
2
Bagi kita yang menggunakan PowerShell, ini adalah cara yang jauh lebih mudah untuk mendapatkan perbedaan dua file dalam repo.
Jay Soyer
2
Bagaimana jawaban luar biasa ini tercantum di bawah 2 jawaban sebelumnya, yang memiliki lebih sedikit suara (dan kurang berguna) saat mengurutkan menurut "aktif" ??? Saya bahkan tidak menghitung jawaban yang ditandai sebagai benar. Terima kasih!
j_random_hacker
@daboross Dalam GNU diffutils 3.4+ (08-08-2016), diffmemiliki --color, yang mungkin membantu (lihat unix.stackexchange.com/a/338960 ). Tetapi meskipun demikian, jika menggunakan diff-so-fancy, tampaknya memerlukan format keluaran spesifik git diff. diff -u(lihat stackoverflow.com/a/4857407/10095231 ) tidak berfungsi.
kelvin
14

Jika file yang ingin Anda bandingkan ada dalam copy pekerjaan Anda, Anda dapat menggunakan diffseperti yang ditunjukkan oleh yang lain, namun jika file tersebut dalam beberapa revisi Anda dapat menentukan revisi untuk setiap file

git diff <revision_1>:<file_1> <revision_2>:<file_2>

seperti yang disebutkan di sini: https://stackoverflow.com/a/3343506/1815446

Dalam kasus Anda (menentukan revisi yang sama untuk kedua file):

git diff <revisionX>:fileA.php <revisionX>:fileB.php
Pau Fracés
sumber
Catatan: Revisi bisa berupa HEAD~2, SHA-1, nama cabang, dll.
ma11hew28
Ini berhasil untuk saya, hanya membandingkan nama file dari dua direktori berbeda: git diff --name-only HEAD:dir1 HEAD:dir1_backup berfungsi setelah salah satu git adddari kedua direktori.
Frank Forte
1
Ini berfungsi jika revisi tidak dicek ke dalam pohon kerja, atau file pohon kerja dimodifikasi dan seseorang ingin membedakan aslinya, atau jika tidak ada pohon yang berfungsi sama sekali, seperti dalam repo git kosong. Sayangnya pertanyaan berperingkat tinggi ini memiliki jawaban yang berperingkat tinggi yang menjawab pertanyaan yang masih berguna, namun sangat berbeda, "bagaimana saya bisa mendapatkan keluaran seperti git-diff tanpa menggunakan git?"
TrentP
4

Untuk membuat gnu diff biasa terlihat lebih seperti git diff, saya akan merekomendasikan parameter ini:

diff -burN file_or_dir1 file_or_dir2

(di mana -bmengabaikan spasi, -udiff terpadu, -rrekursif, -Nmemperlakukan file yang hilang sebagai /dev/null).

Ini berfungsi dengan baik, tetapi masih tidak memiliki warna dan paging otomatis bergaya git hampir tidak ada. Jika Anda ingin memperbaiki keduanya (saya lakukan), instal colordiffdan gunakan seperti ini:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Ini memberikan keluaran dan antarmuka yang sangat dekat dengan aktual git diff.

mvp
sumber
4
-1 karena "Anda tidak bisa" salah (lihat: stackoverflow.com/a/13965200/968531 )
NobodysNightmare
Hapus "Anda tidak bisa", tambahkan instruksi untuk menginstal colordiff dan ini bisa menjadi jawaban yang OK untuk pertanyaan asli.
DylanYoung
-4

Gunakan saja diff biasa.

diff -Nua fileA.php fileB.php
Peter van der Does
sumber
8
-1 karena "Anda tidak bisa" salah (lihat: stackoverflow.com/a/13965200/968531 )
NobodysNightmare