Git: Bagaimana cara membedakan dua file berbeda di cabang yang berbeda?

170

Saya memiliki dua file berbeda di cabang berbeda. Bagaimana saya bisa membedakan mereka dalam satu perintah?

Sesuatu seperti

# git diff branch1/foo.txt branch2/foo-another.txt

Saya bisa melihat file lain, diff dan restore, tapi itu solusi yang cukup kotor.

Ondra Žižka
sumber
3
@EugenKonkov Ini bukan duplikat karena pertanyaan ini menanyakan bagaimana cara membedakan file yang berbeda di cabang yang berbeda. Pertanyaan yang ditautkan hanya menanyakan cara membedakan file yang sama di cabang yang berbeda.
Steve

Jawaban:

214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

Anda juga dapat menggunakan jalur relatif:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
twaggs
sumber
9
Luar biasa! Saya tentu saja tidak dapat menyimpulkan itu dari git help diff. Omong-omong, itu tidak harus nama cabang di depan titik dua, tetapi bisa berupa referensi komit (misalnya nilai SHA-1).
Steve Jorgensen
3
Catatan Penting: Git di windows mengharuskan itempec lengkap menjadi nama unix. yaitu branch1: full \ path \ to \ foo.txt gagal, sementara branch1: full / path / to / foo.txt berfungsi dengan baik, seperti halnya \ path \ to \ foo.txt (tanpa cabang) penuh
Eris
gunakan git difftooldan kemudian jatuhkan branch2:dan itu akan memungkinkan Anda untuk mengedit file di pohon kerja saat ini (untuk membawa perubahan dari branch1)
gMale
Dicoba di linux dengan git versi 1.8.3.1, hanya jalur relatif yang diizinkan.
Sola Yang
21

Sidenote: tidak perlu untuk jalur penuh, Anda bisa mulai dengan ./untuk jalur relatif. Kadang-kadang bisa berguna.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
Campa
sumber
2

Ada banyak cara untuk membandingkan file dari dua cabang yang berbeda. Sebagai contoh:

  • Jika namanya sama atau berbeda:

     git diff branch1:file branch2:file
    

    Contoh:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Hanya jika namanya sama dan Anda ingin membandingkan direktori kerja Anda saat ini dengan beberapa cabang:

    git diff ..someBranch path/to/file
    

    Contoh:

    git diff ..branch2 full/path/to/foo.txt
    

    Dalam contoh ini Anda membandingkan file dari cabang Anda yang sebenarnya dengan file di cabang master.

Anda dapat memeriksa respons ini:

Bandingkan file dari dua cabang berbeda di Git

Javier C.
sumber
1

Jawaban di luar topik - lihat komentar

Hanya untuk menambahkannya, saya menemukannya sebagai sintaks yang sangat mudah:

git diff <branch1> <branch2> <filepath>

Juga berfungsi dengan referensi relatif seperti misalnya:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>
RomainValeri
sumber
1
OP secara khusus meminta "file yang berbeda". Jawaban Anda adalah tentang membandingkan file yang sama di dua cabang yang berbeda.
Etienne Miret
@ EtienneMiret Anda benar sekali, saya melewatkan poin penting itu. Jawaban di luar topik.
RomainValeri
-1

Anda dapat menentukan mulai dan rentang untuk git diffditerapkan. Rentang ditunjukkan dengan ..notasi.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path
JCF
sumber
Ini hanya membandingkan file yang sama di dua cabang; pertanyaannya adalah tentang dua file berbeda di dua cabang.
Piran