Apakah ada cara mudah untuk menghitung jumlah baris yang diubah antara dua commit di git?
Saya tahu saya bisa melakukan git diff
, dan menghitung garis, tetapi ini sepertinya membosankan. Saya juga ingin tahu bagaimana saya bisa melakukan ini, termasuk hanya komit saya sendiri di linecounts.
Jawaban:
Anda ingin
--stat
opsigit diff
, atau jika Anda ingin menguraikannya dalam skrip,--numstat
opsi.--stat
menghasilkan output yang dapat dibaca manusia yang biasa Anda lihat setelah penggabungan;--numstat
menghasilkan tata letak tabel yang bagus yang dapat ditafsirkan dengan mudah oleh skrip.Entah bagaimana saya merindukan bahwa Anda ingin melakukan ini di beberapa komit pada saat yang sama - itu tugas untuk
git log
. Ron DeVera menyentuh ini, tetapi Anda benar-benar dapat melakukan lebih dari apa yang ia sebutkan. Karena secaragit log
internal memanggil mesin diff untuk mencetak informasi yang diminta, Anda dapat memberikannya opsi stat yang berbeda - bukan hanya--shortstat
. Apa yang mungkin ingin Anda gunakan adalah:tetapi Anda bisa menggunakan
--numstat
atau--shortstat
juga.git log
juga dapat memilih komit dengan berbagai cara lain - lihat dokumentasi . Anda mungkin tertarik pada hal-hal seperti--since
(daripada menentukan rentang komit, cukup pilih komit sejak minggu lalu) dan--no-merges
(gabungan komit tidak benar-benar memperkenalkan perubahan), serta opsi output yang cantik (--pretty=oneline, short, medium, full...
).Berikut adalah satu-liner untuk mendapatkan perubahan total alih-alih perubahan per-komit dari git log (ubah opsi pemilihan komit seperti yang diinginkan - ini dilakukan oleh Anda, dari commit1 ke commit2):
(Anda harus membiarkan git log mencetak beberapa informasi identitas tentang komit; Saya sewenang-wenang memilih hash, lalu menggunakan awk untuk hanya memilih garis dengan tiga bidang, yang merupakan informasi stat)
sumber
git diff --shortstat <commit1> <commit2>
adalah yang saya inginkan.--since
dan--until
adalah sesuatu seperti:yesterday
,1 month 2 weeks 3 days 1 hour 1 second ago
, atau1979-02-26 18:30:00
<commit-ish>
- ia bekerja dengan apa pun yang mewakili komit, termasuk komit literal, cabang, tag, dan referensi pada umumnya. Lihat juga stackoverflow.com/questions/23303549/…Untuk yang malas, gunakan
git log --stat
.sumber
-10
untuk menunjukkan sepuluh komit sebelumnya.Q
untuk kembali ke terminal.memberi Anda jumlah baris yang diubah dan ditambahkan. Ini hanya berfungsi dengan perubahan yang tidak dipentaskan. Untuk membandingkan dengan cabang:
sumber
git add
, pastikan untuk melakukannyagit diff --shortstat --cached
EDIT: Anda harus menentukan komit juga (tanpa parameter itu membandingkan direktori kerja dengan indeks). Misalnya
untuk membandingkan induk
HEAD
denganHEAD
.sumber
diff-index
-diff
frontend dapat menangani semuanya; Kasusdiff-index
ini dicakup oleh--cached/--staged
, saya percaya. (Dan tidak ada cara untukdiff-index
membandingkan dua komit yang sewenang-wenang seperti yang diminta OP.)git diff --stat HEAD
HEAD~n
, di manan
sejauh mana Anda ingin kembali.git diff --stat HEAD~5 HEAD
akan menampilkan statistik gabungan untuk 5 komit terakhir relatif terhadap HEAD.Dengan asumsi bahwa Anda ingin membandingkan semua komit Anda antara abcd123 (komit pertama) dan wxyz789 (komit terakhir), termasuk:
Ini memberikan output ringkas seperti:
sumber
--shortstat
bendera mengagumkan, ia bekerja dengangit diff
meskipun (tidakgit log
).Cara lain untuk mendapatkan semua log perubahan dalam periode waktu tertentu
Keluaran:
Dengan konten keluaran yang panjang, Anda dapat mengekspor ke file agar lebih mudah dibaca
sumber
Meskipun semua jawaban di atas benar, di bawah ini mudah digunakan jika Anda perlu menghitung banyak komit terakhir
di bawah satu adalah untuk mendapatkan hitungan 5 komitmen terakhir
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat
untuk mendapatkan hitungan 10 komitmen terakhir
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
generik - ubah N dengan jumlah komit terakhir yang Anda butuhkan
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
untuk menghitung semua komitmen sejak awal
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
sumber
git log --numstat hanya memberi Anda hanya angka
sumber
Saya baru saja memecahkan masalah ini untuk diri saya sendiri, jadi saya akan membagikan apa yang saya dapatkan. Inilah hasil akhirnya:
Perintah yang mendasarinya terlihat seperti ini:
Catat
$@
dalam perintah log untuk meneruskan argumen Anda seperti--author="Brian"
atau--since=yesterday
.Melepaskan awk untuk memasukkannya ke git alias berantakan, jadi alih-alih, saya memasukkannya ke skrip yang dapat dieksekusi di jalur saya (
~/bin/git-stat-sum
), lalu menggunakan skrip di alias di.gitconfig
:Dan itu bekerja dengan sangat baik. Satu hal terakhir yang perlu diperhatikan adalah
file changes
jumlah perubahan pada file, bukan jumlah file unik yang diubah. Itu yang saya cari, tapi mungkin tidak seperti yang Anda harapkan.Ini satu atau dua contoh lain
Sungguh, Anda harus dapat mengganti
git log
perintah dengangit summary
.sumber