Saya telah melihat sekeliling, dan tidak yakin apakah ini mungkin, tetapi ini dia:
Saya memiliki file (javascript) (katakanlah /lib/client.js) di mana saya memiliki pengenal unik yang ditetapkan ke variabel, seperti:
var identifier = "SOME_IDENTIFIER";
Anda dapat menganggap pengenal seperti nomor versi: Secara berkala, kami akan mengubah variabel ini menjadi pengenal baru.
Yang ingin saya lakukan adalah menemukan semua pengenal unik yang pernah kami gunakan. Bagaimana saya bisa melakukan ini dengan git?
Saya membayangkan mungkin ada cara untuk mencari melalui sejarah git, dan mencetak pencocokan baris "var identifier ="
. Saya dapat menghapus duplikat daftar ini secara manual.
Bagaimanapun, saya menghargai semua wawasan di sini. Terima kasih.
Jawaban:
Sejak git 1.8.4 , ada cara yang lebih langsung untuk menjawab pertanyaan Anda.
Dengan asumsi baris itu
110
adalah baris yang mengatakanvar identifier = "SOME_IDENTIFIER";
, maka lakukan ini:Ini akan mengembalikan setiap komit yang menyentuh baris kode itu.
[ Dokumentasi Git (lihat parameter baris perintah "-L")]
sumber
Lihat halaman manual untuk
git-log
dangitdiffcore
. Saya yakin perintah ini akan melakukannya, tetapi mungkin kurang tepat:EDIT: Inilah awal yang kasar untuk skrip bash untuk menunjukkan baris yang sebenarnya. Ini mungkin lebih dari yang Anda cari.
Ini digunakan
git log -G
untuk menemukan komit yang menarik, menggunakan--format=%H
untuk menghasilkan daftar hash komit. Itu kemudian mengulangi setiap komit yang menarik, memintagit grep
untuk menunjukkan baris dari komit itu dan file yang berisi regex, diawali dengan hash komit.EDIT: Diubah untuk digunakan,
-G
bukan-S
seperti yang disarankan dalam komentar.sumber
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Anda juga dapat melakukan ini dengan gitk:
Di tarik-turun "komit", pilih "tambah / hapus string:" dan di kotak teks di sebelahnya, masukkan "var identifier =", dan komit apa pun yang menambah atau menghapus baris yang berisi string itu akan disorot.
sumber
git blame file.js
ataugit gui blame file.js
?git gui blame file.js
akan melakukan itu ... itu akan menampilkan semua revisi file dan siapa yang mengubahnya; Anda cukup mengeklik mundur melalui riwayat.Jika Anda mengadaptasi jawaban @ rob sedikit,
git log
pada dasarnya akan melakukannya untuk Anda, jika yang Anda butuhkan hanyalah perbandingan visual:-U0
berarti keluaran dalam mode tambalan (-p
), dan menunjukkan garis nol konteks di sekitar tambalan.Anda bahkan dapat melakukan ini di seluruh cabang:
Mungkin ada cara untuk menekan header diff, tapi saya tidak tahu satu pun.
sumber
Di magit , Anda dapat melakukannya dengan
Ini kemudian akan meminta Anda untuk file dan mulai, garis akhir.
sumber