Lihat perubahan pada file tertentu menggunakan git

472

Saya tahu bahwa saya bisa menggunakan git diffperintah untuk memeriksa perubahan, tetapi, sejauh yang saya mengerti, itu adalah direktori. Ini berarti memberikan semua perubahan dari semua file pada direktori saat ini.

Bagaimana saya bisa memeriksa hanya perubahan dalam satu file tertentu? Katakanlah, saya telah mengubah file file_1.rb,, file_2.rb... file_N.rb,, tetapi saya hanya tertarik pada perubahan pada file tersebut file_2.rb. Bagaimana cara saya memeriksa perubahan ini (sebelum saya melakukan)?

Mellon
sumber
1
kemungkinan duplikat dari Cara melihat riwayat file di Git?
CharlesB
4
Pertanyaan utama saya adalah bagaimana cara memeriksa perbedaan untuk file tertentu sebelum saya melakukan semua perubahan. Log Git adalah untuk perubahan yang dilakukan, saya kira.
Mellon
1
Dalam pengalaman saya lebih baik menggunakan alat visual seperti GitKraken
Giovanni Benussi

Jawaban:

642

Gunakan perintah seperti:

git diff file_2.rb

Lihat git diffdokumentasi untuk informasi lengkap tentang hal-hal yang bisa Anda dapatkan perbedaannya.

Biasanya, git diffdengan sendirinya menunjukkan semua perubahan di seluruh repositori (bukan hanya direktori saat ini).

Greg Hewgill
sumber
100
Jika Anda ingin melihat perubahan file yang telah Anda "git tambahkan", itu "git diff --cached"
Ana Betts
8
Jika Anda ingin memeriksa file terhadap commit yang lebih lama: $ git diff [commit hash] file_2.rb
Alex Angelico
2
Bagaimana cara keluar dari tampilan berbeda?
Garry
1
Atau gunakan SourceTree.
GeneCode
4
@GurpreetsinghDhanju Coba tekan Q
110

Metode lain (disebutkan dalam jawaban SO ini ) akan menyimpan sejarah di terminal dan memberi Anda track record yang sangat mendalam dari file itu sendiri:

git log --follow -p -- file

Ini akan menampilkan seluruh histori file (termasuk histori di luar nama dan dengan perbedaan untuk setiap perubahan).

Dengan kata lain, jika file bernama bar pernah bernama foo, maka git log -p bar (tanpa opsi --follow) hanya akan menampilkan riwayat file hingga titik di mana namanya diubah - file itu tidak akan menampilkan sejarah file ketika itu dikenal sebagai foo. Menggunakan git log --follow -p bar akan menampilkan seluruh sejarah file, termasuk perubahan apa pun pada file ketika dikenal sebagai foo.

AJ Zane
sumber
3
Bekerja dengan baik dengan --stat untuk memiliki ikhtisar garis yang ditambahkan / dihapus.
Tom Hale
2
Ya jawaban ini harus peringkat setidaknya lebih tinggi, melacak sejarah, bukan hanya perbedaan saat ini, Anda juga tidak harus melacak semua hash komit. Penggunaan yang cukup sederhana namun sangat kuat dalam perubahan
Ilhicas
87

Anda dapat menggunakan gitk [filename]untuk melihat log perubahan

da Rocha Pires
sumber
2
Ini akan menunjukkan riwayat komit pada file, yang kadang-kadang mungkin apa yang Anda butuhkan.
r1k0
26

Anda dapat menggunakan perintah di bawah ini untuk melihat siapa yang telah mengubah apa yang ada dalam file.

git blame <filename>

Vineet
sumber
4
Ini adalah jawaban terbaik karena memberi tahu Anda siapa yang membuat perubahan apa, dan kapan serta yang melakukan perubahan itu adalah bagian darinya. Untuk memfilter perubahan tertentu, lakukan saja di git blame <filename> | grep <searchfor>mana <searchfor>ada nilai pendek. Misalnya, untuk mencari tahu siapa yang berubah fooke bardalam dist/index.php, Anda akan menggunakangit blame dist/index.php | grep bar
Kraang Perdana
15

Anda bisa mengeksekusi

git status -s

Ini akan menampilkan nama file yang dimodifikasi dan kemudian dengan menyalin jalur file yang tertarik Anda dapat melihat perubahan menggunakan git diff

git diff <filepath + filename>
Tejas Pawar
sumber
8

untuk daftar hanya melakukan detail untuk perubahan file tertentu,

git log --follow file_1.rb

untuk membuat daftar perbedaan di antara berbagai komitmen untuk file yang sama,

git log -p file_1.rb

untuk daftar hanya komit dan pesannya,

git log --follow --oneline file_1.rb
Mohideen bin Mohammed
sumber
5

Anda juga bisa mencoba

git show <filename>

Untuk komit, git show akan menampilkan pesan log dan perbedaan teks (antara file Anda dan versi file yang dikomit).

Anda dapat memeriksa git show Documentation untuk informasi lebih lanjut.

LuisBento
sumber
0

Sepenuhnya setuju dengan @Greg Hewgill

Dan jika path Anda menyertakan spasi, Anda dapat menggunakan, coba tambahkan dengan tanda kutip 'atau `

git diff 'MyProject / My Folder / My Sub Folder / file_2.rb'

MrMins
sumber