Menemukan perbedaan antara versi saat ini dan terakhir

670

Menggunakan Git, bagaimana Anda bisa menemukan perbedaan antara versi saat ini dan yang terakhir?

git diff last version:HEAD
Rajeev
sumber
1
Jika Anda menggunakan GitHub untuk lokasi cloud dari repo Anda, ini sangat sederhana: navigasikan ke proyek Anda dan klik tajuk "commit" di tabel yang menampilkan proyek Anda
David Lundquist
1
Arti "versi saat ini dan yang terakhir" benar-benar harus diklarifikasi dalam pertanyaan.
faintsignal

Jawaban:

1171

Saya tidak begitu mengerti arti "versi terakhir".

Karena komit sebelumnya dapat diakses dengan HEAD ^, saya pikir Anda mencari sesuatu seperti:

git diff HEAD^ HEAD

Pada Git 1.8.5, @adalah alias untuk HEAD, sehingga Anda dapat menggunakan:

git diff @~..@

Berikut ini juga akan berfungsi:

git show

Jika Anda ingin mengetahui perbedaan antara head dan komit apa saja yang dapat Anda gunakan:

git diff commit_id HEAD

Dan ini akan meluncurkan alat diff visual Anda (jika dikonfigurasi):

git difftool HEAD^ HEAD

Karena perbandingan dengan HEAD adalah default, Anda dapat menghilangkannya (seperti yang ditunjukkan oleh Orient ):

git diff @^
git diff HEAD^
git diff commit_id

Peringatan

  • @ScottF dan @Panzercrisis menjelaskan dalam komentar bahwa pada Windows ~karakter harus digunakan sebagai ganti ^.
Francisco Puga
sumber
Saya menginginkan sesuatu seperti versi dan versi yang dikomit sebelumnya ... git diff head head-1
Rajeev
7
Pada Git 1.8.5, @adalah alias untuk HEAD. Dan karena ~dan ^sama ketika hanya akan melakukan satu komit, saya merasa git diff @~..@jauh lebih mudah untuk mengetik.
Andrew
80
@Andrew git showmasih lebih mudah, karena @~..@merupakan hal standar untuk ditampilkan.
amalloy
3
git showhanya mencetak pesan komit, itu tidak menghasilkan perbedaan dari perubahan spesifik, setidaknya dalam Git 2.5.4 (Apple Git-61), jadi itu sebenarnya tidak akan menjadi jawaban untuk pertanyaan OP.
user1944491
1
Masalahnya git showadalah jika HEADkomit gabungan Anda tidak akan mendapatkan apa yang Anda harapkan karena komit gabungan itu sendiri mungkin tidak memiliki perubahan itu sendiri. git diff HEAD^ HEADakan menampilkan perubahan aktual antara versi
RubenLaguna
158

Dengan asumsi "versi saat ini" adalah direktori kerja (modifikasi yang tidak dikomit) dan "versi terakhir" adalah HEAD(modifikasi terakhir yang dilakukan untuk cabang saat ini), cukup lakukan

git diff HEAD

Kredit untuk yang berikut ini jatuh ke tangan pengguna Cerran.

Dan jika Anda selalu melewati area pementasan dengan -asaat Anda komit, maka Anda cukup menggunakan git diff.

Ringkasan

  1. git diff menunjukkan perubahan yang tidak bertahap.
  2. git diff --cached menunjukkan perubahan bertahap.
  3. git diff HEAD menunjukkan semua perubahan (baik bertahap maupun tidak bertahap).

Sumber: git-diff (1) Halaman Manual - Cerran

CharlesB
sumber
16
Dan jika Anda selalu melewati area pementasan dengan -asaat Anda komit, maka Anda cukup menggunakan git diff. <1> git diffmenunjukkan perubahan yang tidak bertahap . <2> git diff --cachedmenunjukkan perubahan bertahap . <3> git diff HEADmenunjukkan semua perubahan (baik bertahap maupun tidak bertahap). Sumber: git-diff (1) Halaman Manual
Cerran
1
Ini harus menjadi jawaban yang diterima karena itu menjawab maksud pertanyaan.
tgoneil
Apa nama "versi tidak aktif saat ini" di git? Apakah sebenarnya ada nama?
Mathieu CAROFF
118

Seperti yang ditunjukkan pada komentar oleh amalloy , jika dengan "versi saat ini dan terakhir" yang Anda maksud komit terakhir dan komit sebelum itu, Anda bisa menggunakan

git show
Nighto
sumber
5
Ini yang saya cari. Jawaban yang bagus
CodeManiak
12
Gunakan git show HEAD~1untuk memperlihatkan komit terakhir tetapi satu, dan git show HEAD~2, dll. Untuk komit yang lebih lama. Tampilkan hanya satu file melalui git show HEAD~2 my_file.
Florian Brucker
60

Perbedaan antara komitmen terakhir tetapi satu komit dan terakhir (ditambah kondisi saat ini, jika ada):

git diff HEAD~

atau bahkan (lebih mudah untuk mengetik)

git diff @~

di mana @sinonim untuk HEADcabang saat ini dan ~berarti "beri saya orang tua dari revisi yang disebutkan".

Tomilov Anatoliy
sumber
Saya sangat suka git diff HEAD^(daripada HEAD~bentuk yang setara ).
Sedikit
3
Wortel adalah masalah di beberapa terminal. Senang memiliki opsi
light24bulbs
1
Jawaban dapat ditingkatkan dengan menjelaskan apa ~dan apa @artinya.
Bob Stein
1
Jika kami hanya ingin memeriksa apa yang dilakukan pada commit terakhir, jangan gunakan ini (karena perubahan kotor mempengaruhi diff). Sintaks yang lebih pendek dari diff HEAD^ HEADseharusnya git diff @^!. Lihat git-scm.com/docs/gitrevision untukr1^!
Johnny Wong
@JohnnyWong Terima kasih atas klarifikasi. Saya menyebutkan "keadaan saat ini" untuk tidak membingungkan pembaca.
Tomilov Anatoliy
53

Anda dapat melakukannya dengan cara ini juga:

Bandingkan dengan komit sebelumnya

git diff --name-status HEAD~1..HEAD

Bandingkan dengan dua komitmen saat ini dan sebelumnya

git diff --name-status HEAD~2..HEAD
naoko
sumber
16

Cukup gunakan cachedbendera jika Anda menambahkan, tetapi belum melakukan:

git diff --cached --color
Andy
sumber
1
Ini persis apa yang saya cari ketika saya menemukan pertanyaan ini. Terima kasih!
William Rogers
7

Cepat dan sederhana, dengan asumsi Anda menguasai:

    git diff (checkout_id):file.txt file.txt

Contoh:

    git diff asdfioei91819280din198:file.txt file.txt
Bryan
sumber
4

Pertama, gunakan "git log " untuk membuat daftar log untuk repositori.

Sekarang, pilih dua ID komit, yang berkaitan dengan dua komit. Anda ingin melihat perbedaan ( contoh - Komit terbanyak dan beberapa komit yang lebih lama (sesuai harapan Anda akan versi saat ini dan beberapa versi lama) ).

Selanjutnya, gunakan:

git diff <commit_id1> <commit_id2>

atau

git difftool <commit_id1> <commit_id2>
parasrish
sumber
3

Jika komit atas ditunjuk oleh HEAD maka Anda dapat melakukan sesuatu seperti ini:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

Perbedaan antara komit pertama dan kedua:

git diff HEAD~1 HEAD

Perbedaan antara komit pertama dan ketiga:

git diff HEAD~2 HEAD

Perbedaan antara komit kedua dan ketiga:

git diff HEAD~2 HEAD~1

Dan seterusnya...

bit_cracker007
sumber
2

Saya menggunakan Bitbucket dengan Eclipse IDE dengan Eclipse EGit plugin diinstal.

Saya membandingkan file dari versi riwayatnya (seperti SVN ).

Menu Project Explorer → File → klik kanan → TeamShow in history .

Ini akan membawa sejarah semua perubahan pada file itu. Sekarang Ctrlklik dan pilih dua versi → "Bandingkan satu sama lain" .

Mandrake
sumber