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

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 ^.

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


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

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".


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

16

Cukup gunakan cachedbendera jika Anda menambahkan, tetapi belum melakukan:

git diff --cached --color

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

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>

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...


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" .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.