Saya memindahkan file menggunakan git mv
. Sekarang saya ingin melakukan diff pada file baru untuk membandingkannya dengan file lama (dengan yang lama, sekarang tidak ada nama).
Bagaimana saya melakukan ini?
git
diff
file-rename
mv
dr jerry
sumber
sumber
git diff -- yourRenamedFile
akan cukup. Lihat jawaban saya di bawah iniJawaban:
Anda perlu menggunakan -M untuk membiarkan git mendeteksi secara otomatis file yang dipindahkan saat melakukan diffing. Menggunakan sama
git diff
seperti knittl yang disebutkan tidak bekerja untuk saya.Jadi sederhananya:
git diff -M
harus melakukannya.Dokumentasi untuk sakelar ini adalah:
sumber
~/.gitconfig
?git diff
. Berjalangit diff -M
pada satu file (diganti nama) tidak melaporkan penggantian nama.git log --follow -- file_after_move.txt
bekerja dengan baik. Ini menunjukkan seluruh sejarah, termasuk sebelum pindah. Ada ide? Saya sedang berlarigit version 2.11.0.windows.1
.-C
pilihan untuk mendeteksi salinan berguna dan serupa. Saya menggunakannya dengan-M
untuk melihat diff di mana saya telah refactored satu file menjadi dua (tanpa nama yang cocok dengan aslinya).Selain apa yang ditulis knittl , Anda selalu dapat menggunakan:
di mana
HEAD:./oldfilename
berarti oldfilename di commit terakhir (di HEAD), relatif terhadap direktori saat ini.Jika Anda tidak memiliki git yang cukup baru, Anda harus menggunakannya:
sumber
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
ke direktori dan tidak menambahkan--
sebelumcommit:path
pasangan. Git tampaknya sangat pemilih dengan sintaksis di sini.<commit-ish>:<pathname>
Sintaks adalah pengidentifikasi objek, sesuatu Git-ish; setelah--
Git hanya mengharapkan nama file.Dengan git 2.9 (Juni 2016), Anda tidak perlu menambahkan
-M
lagi.git diff
gunakan-M
secara default.Lihat komit 5404c11 , komit 9501d19 , komit a9276a6 , komit f07fc9e , komit 62df1e6 (25 Feb 2016) oleh Matthieu Moy (
moy
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 5d2a30d , 03 Apr 2016)Tes baru untuk fitur ini ada di sini .
sumber
git diff -M
mengaktifkan rename detection seperti yang dikatakan orang lain (dan seperti yang ditunjukkan @VonC, ini diaktifkan secara default dari git 2.9). Tetapi jika Anda memiliki perubahan besar, deteksi nama yang tidak tepat masih dapat dimatikan lagi. Git akan menampilkan peringatan seperti berikut, yang mudah terlewatkan di tengah-tengah perbedaan yang Anda lihat:Dalam hal ini, setel opsi konfigurasi seperti yang disarankan oleh git, misalnya
dan jalankan kembali perintah diff Anda.
sumber
Untuk alasan apa pun menggunakan
HEAD:./oldfilename
(atau jalur absolut) tidak berfungsi untuk saya, tetapiHEAD:oldfilename
berhasil (terima kasih cmn):HTH
sumber
HEAD:./oldfilename
?jalankan
git diff
tanpa argumen, ataugit diff -- newfilename
. git cukup pintar untuk membandingkan file / konten yang tepat (yaitu konten asli sebelum mengganti nama dengan konten yang diubah setelah mengganti nama)sumber
git mv
dengan memasukkan satu file dan kemudian membandingkan status yang dipentaskan dengan cabang lain yang identik akan menghasilkan perbedaan "semuanya telah dihapus dan diciptakan kembali" kecuali jika-M
digunakan.