Bagaimana saya bisa melihat apa yang telah berubah dalam file sebelum melakukan git?

351

Saya perhatikan bahwa ketika mengerjakan satu atau dua tiket, jika saya melangkah pergi, saya tidak yakin apa yang saya kerjakan, apa yang berubah, dan sebagainya.

Apakah ada cara untuk melihat perubahan yang dibuat untuk file yang diberikan sebelum git add dan kemudian git commit?

Timothy T.
sumber

Jawaban:

525

Anda sedang mencari git diff. Tergantung pada situasi Anda yang sebenarnya, ada tiga cara yang berguna untuk menggunakannya:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Ini akan bekerja secara rekursif pada direktori, dan jika tidak ada jalur yang diberikan, ini menunjukkan semua perubahan.

Cascabel
sumber
1
@ sveilleux2 Tidak, jalankan git diff tanpa argumen - seperti kalimat terakhir dari jawaban mengatakan, jika tidak ada jalur yang diberikan, ini menunjukkan semua perubahan. (Tanda kurung [filename]menunjukkan argumen opsional.) Dengan *Anda membiarkan shell daftar semua file, jadi jika Anda berada di subdirektori Anda hanya akan mendapatkan hal-hal di subdirektori itu (bukan seluruh repo), dan Anda ' akan kehilangan perubahan dalam file tersembunyi.
Cascabel
# tunjukkan perbedaan antara komit saat ini dan indeks # yaitu, apa yang akan Anda komit git diff --cached [nama file] Jangan maksud Anda: # tunjukkan perbedaan antara komit saat ini dan indeks # yaitu, apa yang Anda lakukan untuk mendorong ? git diff --cached [filename]
ofarooq
3
Untuk melihat perbedaan yang dibuat setelah menambahkan file (yaitu, setelah "git add"), lakukan "git diff --staged [nama file]"
Sidtharthan
Oh, kenapa begitu rumit ?! Bagaimana jika kita memiliki beberapa lusin file? .. Hanya mengeluh ke antarmuka git ... Ya, sepertinya, git add -padalah alternatif untuk memeriksa semua file.
Kirby
@ Jefromi - silakan pertimbangkan untuk menambahkan git diff --staged [filename]jawaban utama Anda karena itu adalah situasi yang lebih sering dibutuhkan.
Lazarus Thurston
39

Gunakan git-diff:

git diff yourfile
Felix Kling
sumber
8

git diff filename

elmt
sumber
8

Bagi saya git add -padalah cara yang paling berguna (dan saya pikir dimaksudkan oleh pengembang git?) Untuk meninjau semua perubahan yang tidak dipentaskan (ini menunjukkan perbedaan untuk setiap file), pilih satu set perubahan yang baik yang harus dilakukan dengan komit, lalu ketika Anda memiliki mengatur semua itu, lalu gunakan git commit, dan ulangi untuk komit berikutnya. Kemudian Anda dapat membuat setiap komit menjadi set perubahan yang berguna atau bermakna bahkan jika itu terjadi di berbagai file. Saya juga menyarankan untuk membuat cabang baru untuk setiap tiket atau kegiatan serupa, dan beralih di antara mereka menggunakan checkout(mungkin menggunakan git stashjika Anda tidak ingin melakukan sebelum beralih), meskipun jika Anda melakukan banyak perubahan cepat ini mungkin menyebalkan. Jangan lupa untuk sering bergabung.

Reed Hedges
sumber
Jadi alih-alih git tambahkan nama file gunakan git add -p?
Timothy T.
1
git add -p adalah kombinasi dari pementasan, melihat perubahan yang dapat Anda panggungkan dan memilihnya satu per satu secara interaktif. Lihat Hanya komit bagian dari file di Git untuk lebih lanjut tentang git add -p.
Angelos Asonitis
5

git diff

Tampilkan perubahan antara pohon yang bekerja dan indeks atau pohon, perubahan antara indeks dan pohon, perubahan antara dua pohon, atau perubahan antara dua file pada disk.

miku
sumber
Kutipan ini agak terlalu banyak - secara default, ia melakukan perbandingan pertama: antara pohon kerja dan indeks.
Cascabel
4

Ingat, Anda melakukan perubahan , bukan file.

Untuk alasan ini, sangat jarang saya tidak menggunakan git add -p(atau setara dengan magit) untuk menambahkan perubahan saya.

Dustin
sumber
2
git TIDAK berurusan dengan perubahan - mencoba memikirkannya seolah-olah itu adalah sumber utama kebingungan dan kesalahan. git berurusan dengan snapshot.
Chris Dodd
3
git diff <path>/filename

path dapat menjadi path sistem lengkap Anda hingga file atau
jika Anda berada dalam proyek Anda tempel path file yang dimodifikasi juga
untuk file yang dimodifikasi dengan path yang digunakan:git status

HariKishore
sumber
2

Nah, kasus saya ketika Anda tidak ingin peduli dengan daftar file. Tunjukkan saja semuanya.

Ketika Anda sudah berlari git adddengan daftar file Anda:

$ git diff --cached $(git diff --cached --name-only)

Di versi yang lebih baru git, Anda dapat menggunakan --stagedjuga, yang merupakan sinonim dari --cached.

Hal yang sama dapat digunakan untuk file yang belum ditambahkan tetapi tanpa --cachedopsi.

$ git diff $(git diff --name-only)

Perintah alias git untuk opsi "cache":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
sumber
3
Terima kasih untuk perinciannya git diff --cached --name-only adalah perintah yang saya cari ....
Doogle
1

Pergi ke repo git Anda masing-masing, kemudian jalankan perintah di bawah ini:

git nama file yang berbeda

Ini akan membuka file dengan perubahan ditandai, tekan tombol kembali / masuk untuk menggulir ke bawah file.

Nama file PS harus menyertakan path lengkap file atau Anda dapat menjalankan tanpa path file lengkap dengan masuk ke direktori / folder masing-masing file

Yash Bansal
sumber
0

Anda juga dapat menggunakan editor teks yang ramah git. Mereka menunjukkan warna pada garis yang telah dimodifikasi, warna lain untuk garis yang ditambahkan, warna lain untuk garis yang dihapus, dll.

Editor teks yang baik yang melakukan ini adalah Atom 1.0 GitHub .

AskYous
sumber