Dalam repositori kode Git saya ingin mendaftar semua komit yang berisi kata tertentu. Saya mencoba ini
git log -p | grep --context=4 "word"
tetapi tidak selalu memberi saya kembali nama file (kecuali jika kurang dari 5 baris dari kata yang saya cari. Saya juga mencoba
git grep "word"
tapi itu hanya memberi saya file yang ada dan bukan histori.
Bagaimana cara mencari seluruh riwayat sehingga saya dapat mengikuti perubahan pada kata tertentu? Saya bermaksud mencari basis kode untuk mencari kata yang dapat melacak perubahan (pencarian dalam riwayat file).
Jawaban:
Jika Anda ingin menemukan semua komit di mana pesan komit berisi kata yang diberikan, gunakan
Jika Anda ingin menemukan semua komit tempat "kata" ditambahkan atau dihapus dalam konten file (lebih tepatnya: di mana jumlah kemunculan "kata" berubah), yaitu mencari konten komit , gunakan pencarian yang disebut pencarian 'beliung' dengan
Di git modern juga ada
untuk mencari perbedaan yang barisnya ditambahkan atau dihapus cocok dengan "kata" (juga komit konten ).
Perhatikan bahwa
-G
secara default menerima regex, sementara-S
menerima string, tetapi dapat dimodifikasi untuk menerima regex menggunakan--pickaxe-regex
.Dengan Git 2.25.1 (Februari 2020), dokumentasi diklarifikasi di sekitar regex tersebut.
Lihat komit 9299f84 (06 Feb 2020) oleh Martin Ågren (``) .
(Digabung oleh Junio C Hamano -
gitster
- dalam komit 0d11410 , 12 Feb 2020)The
git diff
Dokumentasi sekarang termasuk:sumber
-S<string>
Cari perbedaan yang memperkenalkan atau menghapus instance <string>.-G<string>
Cari perbedaan yang garis tambah atau hapusnya cocok dengan <regex> yang diberikan.-S<string>
lebih cepat karena hanya memeriksa apakah jumlah kemunculan<string>
diubah, sementara-G<string>
pencarian ditambahkan dan dihapus pada setiap komit.git log --grep="my words"
,.--grep
berbeda dari-S
dan-G
. Anda dapat mengutip string untuk setiap argumen ini.git log
Beliung akan menemukan komit dengan perubahan termasuk "kata" dengangit log -Sword
sumber
Setelah banyak percobaan, saya dapat merekomendasikan yang berikut ini, yang menunjukkan komit yang memperkenalkan atau menghapus baris yang berisi regexp yang diberikan, dan menampilkan perubahan teks di masing-masing, dengan warna yang menunjukkan kata-kata yang ditambahkan dan dihapus.
Butuh beberapa saat untuk menjalankan ... ;-)
sumber
GIT_PAGER=cat
atau tambahkan| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Anda dapat mencoba perintah berikut:
atau menggunakan
grep
cara berikut:Jalankan perintah ini di direktori induk tempat Anda ingin mencari.
sumber
git log --patch --color=always | less +/searching_string
.Satu lagi cara / sintaks untuk melakukannya adalah:
git log -S "word"
Seperti ini Anda dapat mencari misalnya
git log -S "with whitespaces and stuff @/#ü !"
sumber
buron-vim adalah serbaguna untuk pemeriksaan semacam itu di Vim.
Gunakan
:Ggrep
untuk melakukan itu. Untuk informasi lebih lanjut, Anda dapat menginstal pelarian vim dan mencari turorial dengan:help Grep
. Dan episode ini: menjelajahi-sejarah-repositori-git akan memandu Anda untuk melakukan semua itu.sumber
Untuk menggunakan konektor boolean pada ekspresi reguler:
Ekspresi reguler ini mencari ekspresi reguler [0-9] * atau [az] * pada pesan komit.
sumber
Jika Anda ingin mencari data sensitif untuk menghapusnya dari riwayat git Anda (yang merupakan alasan mengapa saya mendarat di sini), ada alat untuk itu. Github sebagai halaman bantuan khusus untuk masalah itu .
Inilah intisari dari artikel tersebut:
sumber