Saya ingin mencari komit terbaru yang memodifikasi file sumber.
Saya dapat menggunakan git blame
untuk melihat semua tanggal untuk komit oleh setiap baris, tetapi sulit untuk melihat persis komit mana yang terakhir menyentuh file.
Bagaimana saya bisa menemukan komit terakhir yang menyentuh file yang diberikan dalam repositori git saya?
--all
opsi.Jika Anda hanya ingin menemukan komit terbaru, maka Anda tidak ingin
git-log
, Anda ingingit-rev-list
, yang mencantumkan objek komit yang mengubah file itu, di jalur komit itu, dimulai dengan yang terbaru (secara kronologis). Sederhananya:git rev-list -1 <commit> <filename>
Karena
git-rev-list
dalam kasus Anda, Anda hanya menyediakan:Ini hanya mengembalikan ID komit terbaru di cabang saat ini untuk mengubah file itu, mis:
215095e2e338525be0baeeebdf66bfbb304e7270
Untuk contoh yang lebih kompleks, Anda dapat menggunakan nama tag, dan bahkan referensi jarak jauh, dan menyertakan nama jalur relatif dengan wildcard, misalnya:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
... Yang akan memberi tahu Anda apa perubahan terbaru ke pertandingan wildcard dalam sejarah cabang itu. Opsi untuk rev-list sangat ekstrem, ini adalah salah satu perintah pipa yang paling penting, sehingga Anda dapat memasukkan atau mengecualikan hampir semua kriteria yang dapat Anda bayangkan.
Tentu saja, lihat halaman Manual git-rev-list (1) .
sumber
git-log
lebih rendah.git-log
adalah porselen,git-rev-list
pipa ledeng.Jika Anda hanya ingin mendapatkan hash dari commit terbaru untuk memodifikasi set file tertentu (dan ingin menghindari
awk
) Anda dapat menggunakan:Ini bisa berguna untuk mendapatkan hash komit untuk selanjutnya digunakan bersama
git describe
.Misalnya (jika berguna bagi siapa saja) ...
Saya membuat id versi saat ini dengan mempertimbangkan komit terbaru untuk mengubah file sumber apa pun (dengan asumsi Anda menandai versi dengan tag seperti
mycode-1.2.1
):Ini menghasilkan id seperti:
mycode-1.2.1
- ketika status file sumber saat ini sesuai dengan versi yang ditandaimycode-1.2.1-g3k7s2
- ketika status file sumber saat ini sesuai dengan komit setelah versi yang ditandaimycode-1.2.1-g3k7s2-mod
- ketika keadaan saat ini dari file sumber telah dimodifikasi sejak komit terakhir mengikuti versi yang ditandaimycode-unknown
- ketika belum ada tag versi yang dibuatsumber
$VN
sepertinya semacam mimpi buruk undead SVNSaya tidak yakin apakah ini yang Anda inginkan tetapi jika Anda melakukan
git log <thefile>
untuk mendapatkan commit yang mengubah file itu. Anda dapat memilih yang paling atas. Seharusnya yang Anda cari.sumber
git log -n1 -- <thefile>
(atau menyalurkan output kehead -1
jika Anda ingin menyia-nyiakan sumber daya) Anda tidak harus secara manual memilih baris teratas (lihat jawaban Jo Liss )-n
dan menggunakan-1
secara langsung.Untuk mendapatkan referensi hanya pada satu baris, cobalah:
sumber
Setelah Anda memiliki id SHA dari komit yang ingin Anda lihat menggunakan
git log FILENAME
, Anda harus dapat melakukangit show SHA_ID_HERE
untuk melihat apa yang Anda lakukan untuk komit tertentu. Anda bahkan tidak perlu memasukkan seluruh ID; 6 karakter pertama harus cukup.sumber
git show $(git log -1 --pretty="%H" -- FILENAME)