🏹
Gitコマンド入門::さまざまなツール(Git Grep2)第八十三回
みなさんこんにちは! 今回も前回に続いて、git grep を学習して行きますね。検索する対象が、ワーキングディレクトリの他、個々のコミットに対しても可能ですからね。その辺りも少し試してみたいと思います。尚、環境は前回と同じものを使って行きますので、環境作成は、前回を参考にしてくださいね!
前回の記事はこちらから!
今日の学習も、引き続き、こちら!
7.5 Git のさまざまなツール - 検索
git本家本元の情報はこちらから!
まずは、コミットを指定します!
$ git log --stat --oneline
3071fcb (HEAD -> main, origin/main) 2nd
test.php | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
3bee1de 1st
sample.php | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
- 1st で、sample.php を追加!
- 2nd で、test.php を追加!
git grep -c 'echo' 3071fcb
で、2ndコミットを指定!
$ git grep -c 'echo' 3071fcb
3071fcb:sample.php:5
3071fcb:test.php:2
git grep -c 'echo' 3bee1de
で、1stコミットを指定!
$ git grep -c 'echo' 3bee1de
3bee1de:sample.php:5
ファイルをワーキングエリアから削除、3rdコミット
git rm test.php // <!-- 削除
git rm sample.php // <!-- 削除
git commit -m "3rd"
[main 3882998] 3rd
2 files changed, 51 deletions(-)
delete mode 100755 sample.php
delete mode 100755 test.php
// --stat でファイルの追加、削除を確認!
$ git log --stat --oneline
3882998 (HEAD -> main) 3rd
sample.php | 35 -----------------------------------
test.php | 16 ----------------
2 files changed, 51 deletions(-)
3071fcb (origin/main) 2nd
test.php | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
3bee1de 1st
sample.php | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
git grep -c 'echo' 3882998
で、3rdコミットを指定!
$ git grep -c 'echo' 3882998
$
git restore --source=3071fc --worktree sample.php
$ git restore --source=3071fc --worktree sample.php
// 2nd コミットから、sample.php をリストアーします!
$ ls
sample.php
// 無事、ファイルを取り出して!
$ git grep -c 'echo'
$
// 何も検索でヒットしませんでした。(^▽^;)
本家のマニュアルを見てみます!
Google翻訳
作業ツリーの追跡ファイル、インデックスファイルに登録されているblob、または指定されたツリーオブジェクトのblobで指定されたパターンを探します。 パターンは、改行文字で区切られた1つ以上の検索式のリストです。 検索式としての空の文字列は、すべての行に一致します。
作業ツリーの追跡ファイルとなっていますね。
$ git status -s
?? sample.php
// この状態だと、追跡ファイルになっていませんね。
$ git add .
// add してからの!
$ git status -s
A sample.php
// これで、追跡対象となりました!
$ git grep -c 'echo'
sample.php:5
// これで、検索対象となりました!
次は、test.phpもリストアー! 今度は、--staged オプションを付けて、add するひと手間を省略!
git restore --source=3071fc --worktree --staged test.php
$ git restore --source=3071fc --worktree --staged test.php
$ git status -s
A sample.php
A test.php
// どちらのファイルも、Aなので追跡対象となっています。
$ git grep -c 'echo'
sample.php:5
test.php:2
git reset --hard HEAD
では、元に戻して!
$ git reset --hard HEAD
HEAD is now at 3882998 3rd
// では、一度、git reset --hard
// ワーキングディレクトリーをクリア!
$ git grep -c --cached 'echo'
$ ls
$ git status -s
// 無事、なにも検索にヒットしなくなりましたね!
まとめ
さあ、いかがでしょうか? ステージングエリアが対象ということ、ファイルを、addして追跡対象にしないと検索対象外ですね。まあ~ 通常のファイル対象ならば、Linuxコマンドの、grep で良いわけですし、、、当たり前の事でした。(^▽^;)
それでは、今回はここまで、お疲れ様でした!
Discussion