Lihat perbedaan antara status saat ini dan pengubahan terakhir

93

Terkadang ketika saya akan membuat komit, saya tidak dapat mengingat dengan tepat apa yang telah berubah sejak komit terakhir. Bagaimana saya bisa melihat perbedaan dari status kode saat ini dan komit terakhir?

travis1097
sumber

Jawaban:

113

Jika Anda belum menambahkan file apa pun ke indeks (dengan git add), cukup lakukan

git diff

Ini akan menunjukkan perbedaan antara pohon kerja dan indeks Anda.

Jika Anda telah menambahkan file ke indeks, Anda perlu melakukan ini untuk menunjukkan perbedaan antara indeks dan komit terakhir (HEAD).

git diff --cached

Terakhir, jika Anda ingin melihat perubahan yang dibuat pada pohon kerja dibandingkan dengan commit terbaru ( HEAD) Anda bisa (seperti yang ditunjukkan Carlos)

git diff HEAD

Perubahan tersebut merupakan kombinasi dari git diffdan git diff --cached.

Klas Mellbourn
sumber
2
git diffmembandingkan worktree terhadap indeks, bukan HEAD.
Carlos Martín Nieto
@ CarlosMartínNieto Anda benar, Pak. Saya telah memperbaiki posting saya untuk mencerminkan ini.
Klas Mellbourn
Saya menjalankannya, tetapi terminal tidak berhenti, bagaimana saya bisa keluar.? tidak ada yang berhasil.
Francisco Corrales Morales
@KlasMellbourn, Apakah mungkin untuk sebuah git diffstatus indeks dan komit sebelumnya dalam satu pesan berbeda?
alpha_989
2
Yah, saya menemukannya git diff --cached HEAD^:)
alpha_989
33

Jika Anda baru saja membuat komit, atau ingin melihat apa yang telah berubah dalam komit terakhir dibandingkan dengan keadaan saat ini (dengan asumsi Anda memiliki pohon kerja yang bersih) Anda dapat menggunakan:

git diff HEAD^

Ini akan membandingkan HEAD dengan commit sebelumnya. Bisa juga dilakukan

git diff HEAD^^

untuk membandingkan dengan state of play 2 commit yang lalu. Untuk melihat perbedaan antara keadaan saat ini dan komit tertentu, cukup lakukan:

git diff b6af6qc

Di mana b6af6qccontoh hash komit.

tallamjr
sumber
3
Head-up untuk versi cmd Windows dari git - Anda harus keluar dari karakter tanda sisipan (^) dengan tanda sisipan itu sendiri. Oleh karena itu, "git diff HEAD ^" akan menjadi "git diff HEAD ^^". Dengan cara yang sama, "HEAD ^^" akan dimasukkan sebagai "HEAD ^^^^".
Eellor
1
Dalam jawaban ini saya rasa agak tidak jelas apa yang dimaksud dengan "komitmen terakhir". HEAD^adalah komit sebelum komit terbaru.
Klas Mellbourn
3

Anda meminta git untuk membedakan komit saat ini / terakhir, yang memiliki singkatan dari HEAD.

Jadi git diff HEADakan membandingkan status worktree saat ini dengan commit saat ini.

Carlos Martín Nieto
sumber
3

ini juga menunjukkan perbedaan dan file apa yang telah diubah / dimodifikasi.

$ git status 

Menampilkan jalur yang memiliki perbedaan antara file indeks dan komit HEAD saat ini, jalur yang memiliki perbedaan antara pohon kerja dan file indeks, dan jalur di pohon kerja yang tidak dilacak oleh git (dan tidak diabaikan oleh gitignore (5) ). Yang pertama adalah apa yang akan Anda lakukan dengan menjalankan git commit; yang kedua dan ketiga adalah apa yang bisa Anda lakukan dengan menjalankan git add sebelum menjalankan git commit.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

dekdev
sumber
2

Ini juga berhasil untuk saya:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Ini biasanya bekerja untuk sejarah linier. Ini bisa menjadi lebih rumit jika ada juga komit gabungan. Saya menyarankan Anda untuk melihat ke dalam dokumen ini untuk penjelasan yang bagus dan lengkap, terutama contoh ilustrasi pohon komit:

https://git-scm.com/docs/gitrevisions

Martin Flaska
sumber