2012-12-14 12 views
10

मेरे गिट रेपो में मेरी वर्तमान शाखा के अलावा मेरे पास कोड का एक टुकड़ा है, और मुझे यकीन नहीं है कि कौन सी प्रतिबद्धता और कौन सी शाखा है। मैं अब तक एक विशिष्ट स्ट्रिंग के लिए प्रतिबद्ध सभी फ़ाइलों में कैसे खोज सकता हूं (और बाद में कोड की उस पंक्ति के आसपास दिखाता हूं)?गिट-रेपो सभी प्रतिबद्ध फ़ाइलों (अज्ञात शाखा और प्रतिबद्ध) में स्ट्रिंग के लिए खोज रहे हैं

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/ 746684/कैसे-से-सर्च-थ्रू-ऑल-कॉमिट-इन-द-रिपोजिटरी –

उत्तर

11

उपयोग git grep:

git grep "string" $(git rev-list --all) 

git rev-list --all यह परियोजना के पूरे इतिहास में खोज बनाता है।

कि इस तरह एक आउटपुट दे देंगे:

git branch --contains <commit> 
+0

क्या मैं केवल एक फ़ाइल/पथ में खोज करने के लिए निर्दिष्ट कर सकता हूं? (उदा। मैं एक विशिष्ट स्थिरता की खोज कर रहा हूं और केवल इस पथ में खोजना चाहता हूं) –

+1

हां: 'git grep" string "$ (git rev-list --all) - पथ'। – jszakmeister

+7

यह बड़े इतिहास के लिए काम नहीं करता है :( 'git grep 'abc' echo $ (git rev-list --all)' 'zsh: तर्क सूची बहुत लंबी: गिट' – tback

1

git branch "branch-name" के साथ शाखा बदलें और फिर git grep "specific string" को अपनी रिपोजिटरी रूट में बदलें। यदि आपके पास बहुत सारी शाखाएं नहीं हैं तो आपको वहां पर्याप्त तेज़ी से मिलना चाहिए। प्रतिबद्ध पता लगाने के लिए

1

ऊपर git grep "string" भिन्नता आप दे रहा है, तो ":

<commit>:<path>:<matched line> 

तो फिर तुम git branch --contains उपयोग कर सकते हैं पता लगाने के लिए जो शाखा प्रतिबद्ध पर है सूची बहुत लंबी "त्रुटियों, आप इसके बजाय git log -S का उपयोग कर सकते हैं। -S विकल्प फ़ाइलों को अंजाम दिया की सामग्री को खोज: (। "प्रो Git" पुस्तक में अधिक "searching" के तहत)

git log -Sstring # look for string in every file of every commit 
git log -Sstring -- path/to/file # only look at the history of the named file 

संबंधित मुद्दे