2009-10-06 14 views
43

यह मुझे पागल बना रहा है।गिट: हटाए गए कोड को खोजें

मुझे हटाए गए कोड को कैसे मिल सकता है?

मैं खोजने समाप्त हो गया है, जहां यह इस के साथ बनाया गया था:

$ 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

आप कह रहे हैं कि जब आप मूल रूप से निम्न कार्य आप कोई हिट मिल ?:

 SHAHIT=\'git log --pretty=oneline -S'some code' | head -1 | awk '{ print $1 }'\' git show $SHAHIT | grep 'some code' 
इसलिए, गैर sensical लगता है .... अगर यह 'में है log', यह' में दिखाई देना चाहिए दिखाओ ... सही? या शायद मैं इस सवाल को गलत समझ रहा हूं। – metasim

+0

यह थोड़ी देर हो गया है क्योंकि मैं इस स्थिति में था और उसने खुद को फिर से प्रस्तुत नहीं किया है, इसलिए मैं आपके आदेश का परीक्षण नहीं कर सकता। वैसे भी धन्यवाद, यह किसी के लिए आसान हो सकता है। – Ivan

+1

पुरानी पोस्ट/यहां टिप्पणी करें, लेकिन फिर भी मुझे वही चाहिए जो मुझे चाहिए। @ सिमोनफ़ीच अपने वाक्यविन्यास को प्रश्न में वास्तविक कोड लाइन खोजने और सूचीबद्ध करने के लिए पूरी तरह से मेरे लिए काम किया है। एक अतिरिक्त जो मुझे उपयोगी पाया गया था, '--context = n' grep विकल्प का उपयोग करने के लिए पहले/बाद में पर्याप्त नाम दिखाने के लिए फ़ाइल नाम क्या है (अन्य grep विकल्प भी हैं जो इससे भी मदद करेंगे)। तो मेरे मामले में दूसरा आदेश था: गिट शो $ SHAHIT | grep --context = 30 'कुछ कोड' –

उत्तर

32

Hmph, मेरे लिए काम करता है:

 
$ 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

इस उदाहरण में, पैट 'गिट लॉग-एसवर्ल्ड' का उपयोग कर रहा है जो * नहीं * diffs दिखाता है।मैं अनुमान लगा रहा हूं (कोशिश नहीं की है) कि अगर अंतिम आदेश 'गिट शो 00f3fd0134d0d54aafbb9d959666efc5fd492b4f था। grep world' तो आपको वह व्यवहार मिलेगा जिसे आप ढूंढ रहे हैं। – metasim

0

यदि आपका संग्रह github.com पर है, तो इसकी खोज के लिए एक एकीकृत कार्य है। यह एमएस में प्रतिक्रिया करता है और यह खोज हटाए गए कोड भी

+6

मुझे हटाए गए कोड, केवल वर्तमान कोड के माध्यम से खोजने के लिए github.com पर कोई रास्ता नहीं मिला ... क्या आप विस्तार से या प्रदर्शन करके मेरी मदद कर सकते हैं? – pulkitsinghal

17

git log -S<string> में काम करता है, लेकिन आप git log -G<regex> उपयोग कर सकते हैं यदि आप और अधिक जटिल खोजों बनाने की जरूरत है।

man से

: अंतर के लिए

-G<regex>

देखो जिसका पैच पाठ शामिल जोड़ा/हटा लाइनों कि <regex> मेल खाते हैं।

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