Di Git, bagaimana saya bisa mencari file atau direktori dengan jalan di sejumlah cabang?
Saya telah menulis sesuatu di cabang, tetapi saya tidak ingat yang mana. Sekarang saya perlu menemukannya.
Klarifikasi : Saya sedang mencari file yang saya buat di salah satu cabang saya. Saya ingin menemukannya melalui jalur, dan bukan dengan isinya, karena saya tidak ingat apa isinya.
Jawaban:
git log
+git branch
akan menemukannya untuk Anda:Mendukung globbing juga:
Kutipan tunggal diperlukan (setidaknya jika menggunakan Bash shell) sehingga shell melewati pola glob untuk git tidak berubah, alih-alih meluaskannya (seperti halnya dengan Unix
find
).sumber
somefile
: jika Anda perlu pencarian regex atas jalur / nama file, misalnya, maka Anda dapat menggunakan jawaban ididak.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Bekerja seperti pesona. git versi 1.7.11.1gitk
mendukung globbing juga. Itu jawaban yang sangat bagus @webmat! Jika Anda ingin melihat di mana itu telah dihapus / dibuat / etc, Anda dapat menggunakangit log --all --stat -- **/my_file.png
, dengan cara itu Anda tidak perlu menebak jika Anda memeriksanya dari komit yang menghapusnya.git ls-tree mungkin membantu. Untuk mencari di semua cabang yang ada:
Keuntungan dari ini adalah Anda juga dapat mencari dengan ekspresi reguler untuk nama file.
sumber
git for-each-ref --format="%(refname)" refs/heads
; do" (c) "git ls-tree --name-only" akan membuat output lebih rapi (D) mungkin perlu menunjukkan dalam jawaban Anda bahwa ada keuntungan dari ini atas solusi Dustin, yaitu bahwa Anda tidak perlu tahu persis nama file - Anda dapat mencari dengan ekspresi reguler yang cocok dengan bagian mana pun dari jalanrefs/remotes
sebagai gantirefs/heads
. Untuk mencari semuanya (cabang lokal, cabang dan tag pelacak jarak jauh), cukup gunakanrefs/
.Meskipun respons ididak cukup keren, dan Handyman5 menyediakan skrip untuk menggunakannya, saya merasa sedikit terbatas untuk menggunakan pendekatan itu.
Kadang-kadang Anda perlu mencari sesuatu yang dapat muncul / menghilang seiring waktu, jadi mengapa tidak mencari yang melakukan semua komitmen? Selain itu, terkadang Anda membutuhkan respons verbal, dan di waktu lain hanya melakukan kecocokan. Berikut adalah dua versi dari opsi tersebut. Letakkan skrip ini di jalur Anda:
git-find-file
git-find-file-verbose
Sekarang kamu bisa melakukannya
Melihat bahwa menggunakan getopt Anda dapat memodifikasi skrip tersebut untuk mencari alternatif semua komit, ref, ref / head, telah verbose, dll.
Periksa https://github.com/albfan/git-find-file untuk kemungkinan implementasi.
sumber
Anda dapat menggunakan
gitk --all
dan mencari komit "menyentuh jalur" dan jalur yang Anda minati.sumber
Salin & tempel ini untuk digunakan
git find-file SEARCHPATTERN
Mencetak semua cabang yang dicari:
Cetak hanya cabang dengan hasil:
Perintah ini akan menambahkan beberapa skrip shell minimal langsung ke Anda
~/.gitconfig
sebagai git alias global yang .sumber
Implementasi yang cukup baik dari
find
perintah untuk repositori Git dapat ditemukan di sini:https://github.com/mirabilos/git-find
sumber