Pertanyaan Bagaimana cara membandingkan file dari dua cabang berbeda?


Saya memiliki skrip yang berfungsi dengan baik di satu cabang dan rusak di cabang lain. Saya ingin melihat dua versi bersebelahan dan melihat apa yang berbeda. Apakah ada cara untuk melakukan ini?

Untuk menjadi jelas Saya tidak mencari alat perbandingan (saya menggunakan Beyond Compare). Saya mencari perintah diff git yang akan memungkinkan saya untuk membandingkan versi master ke versi cabang saya saat ini untuk melihat apa yang telah berubah. Saya tidak di tengah gabungan atau apa pun. Saya hanya ingin mengatakan sesuatu seperti

git diff mybranch/myfile.cs master/myfile.cs

1086
2017-11-04 18:04


asal


Jawaban:


git diff dapat menunjukkan perbedaan antara dua komit:

git diff mybranch master -- myfile.cs

Atau, dengan kata lain:

git diff mybranch..master -- myfile.cs

Menggunakan sintaks yang terakhir, jika salah satu sisinya HEAD itu dapat dihilangkan (mis. master.. membandingkan master untuk HEAD).

Anda mungkin juga tertarik mybranch...master (dari git diff dokumen):

Formulir ini untuk melihat perubahan pada cabang yang berisi dan hingga yang kedua <commit>, dimulai pada leluhur yang sama dari keduanya <commit>. git diff A...B setara dengan git diff $(git-merge-base A B) B.

Dengan kata lain, ini akan memberikan perubahan pada diff master karena itu menyimpang dari mybranch (tetapi tanpa perubahan baru sejak saat itu di mybranch).


Dalam semua kasus, itu -- pemisah sebelum nama file menunjukkan akhir tanda baris perintah. Ini opsional kecuali Git akan bingung jika argumen mengacu pada komit atau file, tetapi memasukkannya bukan kebiasaan buruk untuk dilakukan. Lihat https://stackoverflow.com/a/13321491/54249 untuk beberapa contoh.


Argumen yang sama dapat diteruskan ke git difftool jika Anda memiliki satu dikonfigurasi.


1573
2017-11-04 18:13



Kamu bisa melakukan ini: git diff branch1:file branch2:file

Jika Anda memiliki konfigurasi difftool, maka Anda juga dapat: git difftool branch1:file branch2:file

Pertanyaan terkait: Bagaimana cara melihat git diff output dengan program diff visual


308
2017-11-04 18:12



Sintaks yang lebih modern:

git diff ..master path/to/file

Awalan dot-ganda berarti "dari direktori kerja saat ini ke". Anda juga bisa mengatakan:

  • master.., yaitu kebalikan dari di atas. Ini sama dengan master.
  • mybranch..master, secara eksplisit merujuk keadaan selain pohon kerja saat ini.
  • v2.0.1..master, yaitu mereferensikan tag.
  • [refspec]..[refspec], pada dasarnya apa pun yang dapat diidentifikasi sebagai status kode untuk git.

125
2018-06-25 00:41



Saya hanya melakukannya git diff branch1 branch2 path/to/file

Ini memeriksa perbedaan antara file. Perubahan dalam branch1 akan berwarna merah. Perubahan dalam branch2 akan berwarna hijau.

Diasumsikan itu branch1 adalah masa lalu dan branch2 adalah masa depan. Anda dapat membalikkan ini dengan membalik urutan cabang di diff: git diff branch2 branch1


8
2018-05-22 14:14



Ada banyak cara untuk membandingkan file dari dua cabang berbeda:

  • Pilihan 1: Jika Anda ingin membandingkan file dari n cabang spesifik ke cabang tertentu lainnya:

    git diff branch1name branch2name path/to/file
    

    Contoh:

    git diff mybranch/myfile.cs mysecondbranch/myfile.cs
    

    Dalam contoh ini Anda membandingkan file di cabang "mybranch" ke   file di cabang "mysecondbranch".

  • Pilihan 2: Cara mudah:

     git diff branch1:file branch2:file
    

    Contoh:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs
    

    Contoh ini mirip dengan opsi 1.

  • Opsi 3: Jika Anda ingin membandingkan direktori kerja Anda saat ini dengan beberapa cabang:

    git diff ..someBranch path/to/file
    

    Contoh:

    git diff ..master myfile.cs
    

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


7
2018-04-04 13:34



Setuju dengan jawaban yang disarankan oleh @dahlbyk. Jika Anda ingin diff ditulis ke file diff untuk tinjauan kode gunakan perintah berikut.

git diff branch master -- filepath/filename.extension > filename.diff --cached

2
2017-10-06 07:19



Untuk membandingkan dua file di git bash, Anda perlu menggunakan perintah:

git diff ..master - Filename.extension

Perintah ini akan menunjukkan perbedaan dalam dua file di bash itu sendiri.


0
2018-01-17 04:26



Cara terbaik untuk melakukannya adalah dengan menggunakan git diff dengan cara berikut: git diff <source_branch> <target_branch> -- file_path

Ini akan memeriksa perbedaan antara file di cabang-cabang tersebut. Lihatlah artikel ini untuk informasi lebih lanjut perintah git  dan bagaimana mereka bekerja.


0
2018-05-07 12:18