全体

2017-11-22 5 views
5

マイファイルとして、コードのブロックを検索するためにどのように私は全体

.settings { 
} 

が形成されたときに知りたい

.settings { 
} 


.field { 
    margin-bottom: 1em; 
} 

ています。

1行のコードを検索したい場合は、私はgit log -S".settings {"を実行します。

しかし、ここで私は、全体として

.settings { 
} 

を検索したい、私は

git log -S".settings {\r}" confirm.less.css 
git log -S".settings {\n}" confirm.less.css 
git log -S".settings {\r\n}" confirm.less.css 

を試みたが、すべては何もretrunません。

改行文字を含むコードブロックを検索するにはどうすればよいですか?

+0

「git log -S」は、指定された文字列が番号https://git-scm.com/docs/git-logで変更されたときに表示されます。だから私の推測では、最初のコミットがルールを持つコードブロックを持っていたということです。なぜこれが起こっているのかを伝えることは難しいです。ファイルのリビジョンを表示する 'git log --follow confirm.css'を見てみましょう。 – Francisco

+0

@Francisco 1行のコードを検索するのではなく、この場合は '.settings {'と '} 'を一緒に検索する方法を尋ねています。 – Gqqnbig

+1

これは本当に可能ではありませんが、私は思っていません(Gitのトラックは行ごとに変更されます)。 diffを見るために何かを書くと、変更された行の数があなたの探しているものを取り囲むのに十分かどうか、あるいは手動で 'git blame'を見て、各行がいつ導入されたかを見ることができます。 – Whymarrh

答えて

1

これを正しく動作させるにはいくつかの問題がありました。

まず、RegExの{}メタキャラクタをエスケープ処理し、--pickaxe-regexで拡張一致を有効にする必要があると思います。また、括弧で囲まれた改行を含むスペースに貪欲にマッチさせるために、単純な\s*を使用しました。

ここでは、私が最初に出現を含むコミット返さ

git log -S".settings \{\s*\}" --pickaxe-regex confirm.less.css

を思い付いたコマンドです。

3

はあなたにその範囲への更新の全体の歴史を取得しますが、それらの最古のは、あなたが望むものになります

git log -L '/^.settings {/,+1':path/to/it 

を試してみてください。