2009-10-06 6 views
43

これは私をナッツにしています。Git:削除されたコードを見つける

削除されたコードはどのようにして見つけられますか?

私はそれがこれで作成された場所見つけてしまった:

$ git log --pretty=oneline -S'some code' 

そして、それは十分だが、私は、今のところ何のサイコロも、それが削除された場所を見つけることは興味があったん、と。

まず、git diff HEAD..HEAD^|grep 'some code'を試してみたところ、範囲が広がり、削除された行が見つかるまでその範囲が広がりました。ニース、範囲HEAD^^..HEAD^^^でそれを見つけたら、git show HEAD^^^git show HEAD^^grepとしますが、コードはどこにも見つかりません!

は、その後、私はgit bisectにビットを読み、そして案の定、それは私に犯人をすることになっている単一のリビジョンを与える...再び、git show rev|grep 'some code'が空に来る...

何?私は間違って何をしていますか?

ありがとうございます!

+2

を言っていますショー '...右?あるいは、私はその質問を誤解しているかもしれません。 – metasim

+0

私はこのような状況にあったので、しばらくして、もう一度自分自身を提示していないので、私はあなたのコマンドをテストすることはできません。とにかくおかげさまで、それは誰かのために便利になるかもしれません。 – Ivan

+1

ここに古い投稿/コメントがありますが、まさに私が必要としていたものです。 @SimeonFitchあなたの構文は、問題の実際のコード行を見つけてリストするために、私のために完璧に機能しました。私が役に立つと思った追加の1つは、 '--context = n' grepオプションを使って、前後に十分な行を表示して、ファイル名が何であるかを知ることでした(他のgrepオプションもあります)。だから私の場合、2番目のコマンドは:git show $ SHAHIT | grep --context = 30 'some code' –

答えて

32

フン、私の作品:

 
$ git init 
Initialized empty Git repository in /Users/pknotz/foo/.git/ 

$ echo "Hello" > a 

$ git add a 

$ git commit -am "initial commit" 
[master (root-commit) 7e52a51] initial commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 a 

$ echo " World" >> a 

$ git commit -am "Be more specific" 
[master 080e9fe] Be more specific 
1 files changed, 1 insertions(+), 0 deletions(-) 

$ echo "Hello" > a 

$ git commit -am "Be less specific" 
[master 00f3fd0] Be less specific 
1 files changed, 0 insertions(+), 1 deletions(-) 

$ cat a 
Hello 

$ git log -SWorld 
commit 00f3fd0134d0d54aafbb9d959666efc5fd492b4f 
Author: Pat Notz <[email protected]> 
Date: Tue Oct 6 17:20:48 2009 -0600 

    Be less specific 

commit 080e9fe84ff89aab9d9d51fb5d8d59e8f663ee7f 
Author: Pat Notz <[email protected]> 
Date: Tue Oct 6 17:20:33 2009 -0600 

    Be more specific 

それとも、これはあなたが何を意味するかではないでしょうか?

+0

それは私の言いたいことです...もしそれが私にとってはうまくいかなければ、インデックスが壊れているか、歴史が書き直されているかもしれませんか? – Ivan

+4

この例では、patはdiffを表示しない* git log -SWorldを使用しています。私は、最後のコマンドが 'git show 00f3fd0134d0d54aafbb9d959666efc5fd492b4fだったなら、それを試していないと推測しています。 grep World'では、あなたが探している行動を得るでしょう。 – metasim

0

リポジトリがgithub.comにある場合、リポジトリには検索機能が統合されています。 これはms単位で応答し、削除されたコードでも検索します

+6

github.comで削除されたコードを検索する方法を見つけられませんでした。現在のコードのみ...あなたはどんな方法で具体的に説明できますか? – pulkitsinghal

17

git log -S<string>ジョブは行いますが、より複雑な検索を行う必要がある場合はgit log -G<regex>を使用できます。 manから

-G<regex>

パッチのテキストが追加/削除された行に<regex>と一致 が含まれている相違点を探します。あなたは基本的にあなたは何のヒットを取得していない、次のないとき?:

 
SHAHIT=\`git log --pretty=oneline -S'some code' | head -1 | awk '{ print $1 }'\` 
git show $SHAHIT | grep 'some code' 
もしそうなら、それはlog` `でいた場合、それは`に見えるはずです....無意味思われること

関連する問題