2012-10-10 4 views
5

私はいくつかの時間前にいくつかのコミットで削除されたいくつかのコードを取り戻したいと思います。コードが何であるかは覚えていませんが、何か非常に便利だったことを思い出しましたが、必要がないと思ったので削除しました。しかし、今ではそのコードを取り戻す必要がありますが、その機能が何であるかを覚えています。git:削除されたコンテンツを見つける。私は周囲のコンテキストだけを知っています

その他の情報:この機能を含むファイルには合計500行のコードも含まれています。コードが一度に現れたことを知っている30のコミット範囲があります。

この質問は高いレベルの問題です。私が知っている情報を使って、私が望む情報を得るにはどうすればいいですか?

+3

問題が解決しましたか?そうであれば、回答があればそれを受け入れるか、自分自身で回答を受け入れることができれば、他の人に知識の恩恵を受けることができればいいですね、ありがとう! –

答えて

0

あなたは、関数名、またはその他の重要な単語や変数を覚えることができる場合は、rev1rev2があなたのコミット範囲の限界ですgit grep

git grep <regexp> $(git rev-list <rev1>..<rev2>) 

を試すことができます。すべてのコミットコンテンツ(削除を含む)をgrepしますので、確実にコードを見つけることができます。詳細については

--reverse 

ウォーク履歴前方の代わりに、後方でHow to grep (search) committed code in the git history?

+0

私は理解しているので、関数名を含むコードのすべての行を出力しますか?そうだとすれば、私はそれらの行を望んでいない、私はそれらを_near_それをしたい。ただし、削除されたコードは、関数名がdiffに表示される関数名の先頭の近くにありません。また、関数自体はすべてのコミットにあります。だから残念ながら、これは私を助けません。 - 私が何かを誤解している場合を除き、 –

+0

あなたは関数名を持っているので、それはまだ存在し、あなたはそれに近いコードを探していますよね?あなたはどのファイルを探すべきかを知っています。 'git blame'のような音は仕事をします – CharlesB

1

使用Gitの責任を参照してください。行が現れたリビジョンを表示する代わりに、行が存在する最後のリビジョンを表示します。これにはSTARTのような改訂の範囲が必要です。

またはあなたができる最善の検索キーワードである興味のあるコードが

3
  1. を表示されますものを見つけるためにあなたの30回のコミットにバイナリ検索を実行するために二分gitのを再生しようとします。関数名を知っていれば

    git log -Sfunction 
    

    が完璧です。

  2. あなたがそれぞれで検索することができますパターンを持っている場合は、の変更をコミット:

    git log --grep=pattern 
    

    ウィル・リストは、そのパターンを含むコミットします。大文字と小文字を区別しない一致のために-iを追加します。あなたの全文を与えるそうでない場合

    git log -p FIRST...LAST | less 
    

    の正規表現マッチ

  3. ため--regexを追加します。あなたは...


ああを検索、または単にスキャンし、視覚的にスクロールして可能性があります。 PS。あなたはそれが長い関数である言及するので、あなただけの

git log --stat FIRST...LAST 

を行い、差分の統計では、多くの欠失()を持つファイルを見ることができます。

+1

' git log -S'は私のために似たような状況で素晴らしい仕事をしました。私は以前は削除されたRubyクラスにあったコードを見なければなりませんでした。驚くばかり! :) –

関連する問題