Di Git, bagaimana saya bisa membandingkan file yang sama antara dua komit yang berbeda (tidak berdekatan) pada cabang yang sama (master misalnya)?
Saya mencari fitur perbandingan seperti yang ada di Visual SourceSafe (VSS) atau Team Foundation Server (TFS).
Apakah mungkin di Git?
..
tidak benar-benar diperlukan, meskipun itu akan bekerja dengannya (kecuali dalam versi yang cukup lama, mungkin). Anda juga dapat menggunakangit log
ataugitk
menemukan SHA1 untuk digunakan, jika kedua komit tersebut terpisah sangat jauh.gitk
juga memiliki "diff selected -> this" dan "diff this -> selected" dalam menu konteksnya.--
Berguna misalnya ketika Anda memiliki file bernama-p
. Baik untuk digunakan dalam skrip, hanya dalam kasus yang jarang diperlukan dalam praktekAnda juga dapat membandingkan dua file berbeda dalam dua revisi berbeda, seperti ini:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
sumber
<file_1>
dan<file_2>
berada di direktori saat ini, bukan pada direktori git dikelola tingkat atas, kita harus bergantung./
pada Unix:<revision_1>:./filename_1
Jika Anda telah mengkonfigurasi "difftool" yang dapat Anda gunakan
Contoh: Membandingkan file dari komit terakhir ke komit sebelumnya di cabang yang sama: Asumsikan bahwa jika Anda berada di folder root proyek Anda
Anda harus memiliki entri berikut di file ~ / .gitconfig Anda atau dalam file project / .git / config. Instal p4merge [Ini adalah alat diff dan merge yang saya sukai]
sumber
Periksa
$ git log
, salin ID SHA-1 dari dua commit yang berbeda, dan jalankangit diff
perintah dengan ID tersebut. sebagai contoh:sumber
git diff (sha-id-one) (sha-id-two) -- filename.ext
tanpa nama file itu akan mencantumkan diff dari semua file dalam dua komit.Jika Anda ingin melihat semua perubahan pada file di antara kedua commit berdasarkan komitmen, Anda juga dapat melakukannya
git log -u $start_commit..$end_commit -- path/to/file
sumber
Berikut adalah skrip Perl yang mencetak perintah Git diff untuk file yang diberikan seperti yang ditemukan dalam perintah Git log.
Misalnya
Hasil:
yang kemudian dapat dipotong dan disisipkan dalam sesi jendela shell atau disalurkan ke
/bin/sh
.Catatan:
Kode:
sumber
Jika Anda ingin membuat diff dengan lebih dari satu file, dengan metode yang ditentukan oleh @mipadi:
Misalnya perbedaan antara
HEAD
dan Andamaster
, untuk menemukan semua.coffee
file:Ini akan secara rekursif mencari
your_search_folder/
semua.coffee
file Anda dan membuat perbedaan antara mereka danmaster
versinya.sumber
Jika Anda memiliki beberapa file atau direktori dan ingin membandingkan komitmen yang tidak berkelanjutan, Anda dapat melakukan ini:
Buat cabang sementara ( "revisi" dalam contoh ini)
Putar balik ke target komit pertama
Cherry memilih mereka yang tertarik
Terapkan diff
Ketika kamu selesai
sumber
Hanya cara lain untuk menggunakan kehebatan Git ...
sumber
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Jika Anda ingin perbandingan visual sederhana pada Windows seperti yang Anda dapatkan di Visual SourceSafe atau Team Foundation Server (TFS), coba ini:
Catatan: Setelah memutakhirkan ke Windows 10 saya telah kehilangan opsi menu konteks Git. Namun, Anda dapat mencapai hal yang sama menggunakan 'gitk' atau 'gitk filename' di jendela perintah.
Setelah Anda memanggil 'Git History', alat Git GUI akan mulai, dengan riwayat file di panel kiri atas. Pilih salah satu versi yang ingin Anda bandingkan. Kemudian klik kanan pada versi kedua dan pilih salah satu
Diff ini -> dipilih
atau
Diff dipilih -> ini
Perbedaan kode warna akan muncul di panel kiri bawah.
sumber