Cara melihat file git di diff sebelum melakukan

443

Ini sering terjadi pada saya:

Saya sedang mengerjakan beberapa perubahan terkait pada saat yang sama selama satu atau dua hari, dan ketika saatnya untuk melakukan, saya akhirnya lupa apa yang berubah dalam file tertentu. (Ini hanya repo git pribadi, jadi saya setuju dengan memiliki lebih dari satu pembaruan dalam komit.)

Apakah ada cara untuk melihat dulu perubahan antara file lokal saya, yang akan diperiksa, dan komit terakhir untuk file itu?

Sesuatu seperti:

git diff --changed /myfile.txt

Dan itu akan mencetak sesuatu seperti:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

Dengan cara ini, saya dapat dengan cepat melihat apa yang telah saya lakukan dalam file itu sejak terakhir kali diperiksa.

Saus McBoss
sumber

Jawaban:

732

Jika Anda ingin melihat apa yang belum Anda git addedit:

git diff myfile.txt

atau jika Anda ingin melihat perubahan yang sudah ditambahkan

git diff --cached myfile.txt
Amber
sumber
20
lihat git add -p. Tinjau setiap perubahan, setujui perubahan secara selektif, batalkan kapan saja jika Anda berubah pikiran, dan bahkan sunting sebidang. Saya tidak pernah git addtanpanya.
Kyle Baker
2
bagaimana Anda bisa keluar dari file?
Kick Buttowski
3
@Kick Coba tekanq
wjandrea
juga, jika Anda ingin menghapus awalan 'a /' dan 'b /' konyol di hasil yang berbeda, Anda dapat mengatur git config --global diff.noprefix true.
Liang
64
git diff HEAD file

akan menunjukkan kepada Anda perubahan yang Anda tambahkan ke meja kerja Anda dari komit terakhir. Semua perubahan (dipentaskan atau tidak dipentaskan) akan ditampilkan.

ouah
sumber
1
Solusi Anda berhasil. Tapi saya agak bingung. HEAD menunjuk ke nomor komit terbaru. Jadi, ketika kita git add, indeks direktori kerja diperbarui dan bukan HEAD. Jadi bagaimana caranya menunjukkan perbedaannya.
Mav55
17

Untuk memeriksa perbedaan lokal:

git diff myfile.txt

atau Anda dapat menggunakan alat diff (jika Anda ingin mengembalikan beberapa perubahan):

git difftool myfile.txt

Untuk menggunakan git difftoollebih efisien, instal dan gunakan alat GUI favorit Anda seperti Meld, DiffMerge atau OpenDiff.

Catatan: Anda juga dapat menggunakan .(bukan nama file) untuk melihat perubahan dir saat ini.

Untuk memeriksa perubahan per setiap baris, gunakan: git blameyang akan menampilkan baris mana yang dikomit di mana komit.


Untuk melihat file aktual sebelum komit (di mana mastercabang Anda), jalankan:

git show master:path/my_file
kenorb
sumber
15

Sudahkah Anda mencoba -v(atau --verbose) opsi git commit? Itu menambahkan perbedaan komit di editor pesan.

vhallac
sumber
Jawaban yang bagus. Ini dapat memberikan informasi dalam editor komit, membuat saya komit lebih mudah. Apakah ada cara untuk menutup area informasi Changes not staged for commit:yang dapat membuat editor komit lebih bersih.
Radian Jheng
15

Teknik lain yang perlu dipertimbangkan jika Anda ingin membandingkan file dengan komit terakhir yang lebih bagus:

git diff master myfile.txt

Keuntungan dari teknik ini adalah Anda juga dapat membandingkan dengan komit kedua dari belakang dengan:

git diff master^ myfile.txt

dan yang sebelumnya:

git diff master^^ myfile.txt

Anda juga dapat mengganti karakter '~' untuk tanda sisipan '^' dan 'you branch name' untuk 'master' jika Anda tidak berada di cabang master.

anisbet
sumber
14

Saya pikir ini adalah kasus penggunaan sempurna yang menjamin GUI. - Meskipun saya benar-benar mengerti bahwa itu juga dapat dicapai dengan cukup baik di dalam baris perintah.

Secara pribadi, setiap komitmen saya, saya lakukan dari git-gui. Di mana saya dapat membuat beberapa atom melakukan komitmen dengan potongan / baris terpisah jika masuk akal untuk melakukannya.

Gut Gui memungkinkan tampilan diff dalam antarmuka berwarna yang diformat dengan baik, agak ringan. Sepertinya ini adalah sesuatu yang harus Anda checkout juga.

Lakshman Prasad
sumber
Saya setuju - ini juga memungkinkan Anda untuk mengedit pesan komit sambil melihat diff.
François
Bagus untuk tahu, tapi saya ingin tetap menggunakan CLI. Saya telah menggunakan beberapa paket yang memilikinya, tetapi saya telah pindah ke terminal / vim untuk alur kerja saya. Terimakasih Meskipun.
Sauce McBoss
Ya jika Anda tetap menggunakan GUI, ada banyak fitur keren git bisectyang tidak dapat diakses.
NoBugs
2
Saya setuju - Ada banyak opsi yang lebih cepat dan lebih masuk akal untuk menggunakan baris perintah. Namun, perubahan pratinjau bukan salah satunya.
VitalyB
Ada juga antarmuka pengguna teks, yang berjalan di terminal. Satu yang patut dicoba adalah tig"antarmuka mode teks untuk Git".
smido
10

Pada macOS, buka direktori git root dan masukkan git diff *

catanore
sumber
Ya benar, saya baru saja mengujinya. Apakah Anda sudah menginstal git? Ada pesan kesalahan? Mungkin pertanyaan baru bisa diajukan tentang ini.
catanore
4

Cara terbaik yang saya temukan, selain menggunakan GUI komit khusus, adalah dengan menggunakan git difftool -d- Ini membuka alat Anda dalam mode perbandingan direktori, membandingkan HEAD dengan folder kotor saat ini.

VitalyB
sumber
persis apa yang saya butuhkan. Terima kasih
Ivan Ferrer Villa
3
git difftool -d HEAD filename.txt

Ini menunjukkan perbandingan menggunakan jendela celah VI di terminal.

Tomachi
sumber