

Git で管理しているプロジェクトにおいて、自分の変更した範囲で grep をかけたいです。  
コミットを指定するか、あるいはブランチを指定するなどの方法でも良いです。

Rubymine でできれば良いですが、他の方法でも。みなさんどのようにやっているのでしょうか？


CC BY-SA 3.0
2017-07-11T07:19:21.753
36273
2017-07-12T03:57:29.900
2017-07-12T03:56:27.170
19110
12896
question
git rubymine grep
Rubymine で変更範囲内で grep したい


### ターミナル上で調べる

Git 1.7.4 以降で `git log -G<regex> --author=<pattern>` が使えます。

今回の目的だと、以下のオプションが便利でしょう。

  * [検索範囲を指定する](https://git-scm.com/docs/git-log#_commit_limiting)
    * `--all`
    * `--branches[=<pattern>]`
    * `--tags[=<pattern>]`
  * [コミットの diff を表示する](https://git-scm.com/docs/git-log#_diff_formatting)
    * `-c`： diff を表示する。
    * `--cc`： 短く diff を表示する。

RubyMine を使うなら、RubyMine 上の Terminal を起動してこのコマンドを打ち込むことができます。Terminal は `Shift`
\- `Shift` で起動する[検索ウィンドウ](https://www.jetbrains.com/help/ruby/searching-
everywhere.html)から探すか、メニューの "View" → "Tool Windows" → "Terminal" から起動できます。

何回も使うなら、エイリアスを設定すると便利です。

### その他の Git コマンド

  * [`git log -S<string>`](https://git-scm.com/docs/git-log#git-log--Sltstringgt)： `-G` オプションと似たオプションです。[`--pickaxe-regex`](https://git-scm.com/docs/git-log#git-log---pickaxe-regex)をつけると正規表現にもできます。
  * `git grep <regexp> $(git rev-list --all --author=<pattern>)`： 同じようなことを別のコマンドで行う方法です。これを使うと行単位で出力されます。 (詳しくは [Jeet](https://stackoverflow.com/users/268330/jeet) さんの [Stack Overflow への投稿](https://stackoverflow.com/a/2929502/5989200)を参照してください)

### 参考

  * ["How to grep (search) committed code in the git history?"](https://stackoverflow.com/q/2928584/5989200) \-- Stack Overflow 
    * 上の質問の類似質問たち
    * ["How to grep Git commit diffs or contents for a certain word?"](https://stackoverflow.com/q/1337320/5989200) \-- Stack Overflow
    * ["Is it possible to perform a 'grep search' in all the branches of git project"](https://stackoverflow.com/q/15292391/5989200) \-- Stack Overflow
    * ["Using git, how could I search for a string across all branches?"](https://stackoverflow.com/q/7151311/5989200) \-- Stack Overflow


CC BY-SA 3.0
2017-07-12T03:57:29.900
36286
2017-07-12T03:57:29.900
19110
36273
answer