回答:
git log
+ git branch
あなたのためにそれを見つけます:
% git log --all -- somefile
commit 55d2069a092e07c56a6b4d321509ba7620664c63
Author: Dustin Sallings <dustin@spy.net>
Date: Tue Dec 16 14:16:22 2008 -0800
added somefile
% git branch -a --contains 55d2069
otherbranch
グロビングもサポートします:
% git log --all -- '**/my_file.png'
(少なくともBashシェルを使用している場合は)単一引用符が必要なため、シェルは(Unixと同様にfind
)グロブパターンを展開するのではなく、変更せずにgitに渡します。
somefile
たとえば、パス/ファイル名に対して正規表現検索が必要な場合は、ididakの回答を使用できます。
git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
。魅力のように働いた。gitバージョン1.7.11.1
gitk
は、グロビングもサポートしていることに注意してください。それは@webmatの素晴らしい答えです!削除/作成された/ etcの場所を確認したい場合は、を使用できgit log --all --stat -- **/my_file.png
ます。これにより、削除されたコミットからチェックアウトしているかどうかを推測する必要がなくなります。
git ls-treeが役立つかもしれません。既存のすべてのブランチを検索するには:
for branch in `git for-each-ref --format="%(refname)" refs/heads`; do
echo $branch :; git ls-tree -r --name-only $branch | grep '<foo>'
done
これの利点は、ファイル名を正規表現で検索できることです。
git for-each-ref --format="%(refname)" refs/heads
です。たとえば、「for branch in ; do」(c)「git ls-tree --name-only」は、出力をより整然とします。 (d)ダスティンのソリューションよりも優れている点、つまり、ファイル名を正確に知る必要がないという回答で指摘する価値があるかもしれません-パスの任意の部分に一致する正規表現で検索できます
refs/remotes
には、の代わりにを使用しますrefs/heads
。すべて(ローカルブランチ、リモートトラッキングブランチ、タグ)を検索するには、を使用しますrefs/
。
がididakの応答はかなりクールで、Handyman5はそれを使用するスクリプトを提供し、私はそれをそのアプローチを使用するように制限された少しを発見しました。
時々出現/消失する可能性があるものを検索する必要がある場合があるので、すべてのコミットに対して検索しないのはなぜですか?その上、時には詳細な応答が必要なこともあれば、マッチをコミットするだけのこともあります。これらのオプションの2つのバージョンを次に示します。これらのスクリプトをパスに配置します。
git-find-file
for branch in $(git rev-list --all)
do
if (git ls-tree -r --name-only $branch | grep --quiet "$1")
then
echo $branch
fi
done
git-find-file-verbose
for branch in $(git rev-list --all)
do
git ls-tree -r --name-only $branch | grep "$1" | sed 's/^/'$branch': /'
done
今できる
$ git find-file <regex>
sha1
sha2
$ git find-file-verbose <regex>
sha1: path/to/<regex>/searched
sha1: path/to/another/<regex>/in/same/sha
sha2: path/to/other/<regex>/in/other/sha
使用していることを参照してくださいgetoptのことなど、冗長となって、あなたが別の検索にすべてのコミット、レフリー、レフリー/ヘッドをそのスクリプトを変更することができます
$ git find-file <regex>
$ git find-file --verbose <regex>
$ git find-file --verbose --decorated --color <regex>
チェックアウトhttps://github.com/albfan/git-find-file可能な実装のために。
gitk --all
コミットを使用して「タッチパス」と興味のあるパス名を検索できます。
これをコピーして貼り付けて使用します git find-file SEARCHPATTERN
検索されたすべてのブランチを印刷する:
git config --global alias.find-file '!for branch in `git for-each-ref --format="%(refname)" refs/heads`; do echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; done; :'
結果のあるブランチのみを印刷します。
git config --global alias.find-file '!for branch in $(git for-each-ref --format="%(refname)" refs/heads); do if git ls-tree -r --name-only $branch | grep "$1" > /dev/null; then echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; fi; done; :'
これらのコマンドは、いくつかの最小限のシェルスクリプト~/.gitconfig
をグローバルgitエイリアスとして直接に追加します。
find
Gitリポジトリ用のコマンドのかなりまともな実装は、次の場所にあります。