383

Git で、多数のブランチにまたがるパスでファイルまたはディレクトリを検索するにはどうすればよいですか?

ブランチに何か書いたことがありますが、どのブランチか覚えていません。今、私はそれを見つける必要があります。

明確化: ブランチの 1 つで作成したファイルを探しています。内容を覚えていないので、内容ではなくパスで検索したいと思います。

4

6 に答える 6

526

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 シェルを使用している場合)、シェルは glob パターンを展開するのではなく、変更せずに git に渡します (Unix の場合と同様find)。

于 2008-12-16T22:17:50.643 に答える
75

gitls-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

これの利点は、ファイル名を正規表現で検索できることです。

于 2008-12-16T20:47:14.007 に答える
12

gitk --all「パスに触れる」コミットと興味のあるパス名を使用して検索できます。

于 2008-12-16T21:31:20.377 に答える
10

これをコピペして使う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これらのコマンドは、いくつかの最小限のシェル スクリプトをas global git aliasに直接追加します。

于 2016-05-13T14:33:04.647 に答える
-2

Git リポジトリのコマンドの適切な実装は、find次の場所にあります。

https://github.com/mirabilos/git-find

于 2016-06-13T22:17:15.600 に答える