2009-02-16 14 views
8

गिट में विकास की हमारी पिछली शाखाओं में किसी बिंदु पर विलय कर दिया गया था। हालांकि, गलत विलय निर्णय लिया गया था और इसलिए कुछ कोड ने इसे मास्टर शाखा में नहीं बनाया था, जिसे हम उम्मीद करते थे। (मास्टर शाखा में अंतिम विलय से पहले विभिन्न शाखाओं के कई विलय थे। इसलिए शाखाकरण और विलय इतिहास काफी जटिल था।)मर्ज त्रुटि खोजने के लिए गिट रिपॉजिटरी इतिहास कैसे खोजें?

क्या गिट रिपोजिटरी को खोजने का एक आसान तरीका है यह निर्धारित करने के लिए कि "गलत" "निर्णय पर बनाया गया था?

(। मैं पहले से ही इस विशेष मामले के लिए जवाब पता है, लेकिन यह खोजने की प्रक्रिया में थोड़ा कठिन था)

संपादित करें: कारण Git दोष अपर्याप्त साबित हुआ है कि लाइन के बाद में एक कुछ समय के लिए प्रतिबद्ध छुआ था विलय त्रुटि। आपके मामले में

उत्तर

7

यदि आप गिट शाखा विलय द्वारा संशोधित फ़ाइल में एक पंक्ति को जानते हैं, तो आप 'git blame file.txt' कर सकते हैं और प्रतिबद्ध हैश संख्या निर्धारित कर सकते हैं और फ़ाइल में लाइन के लेखक को प्रतिबद्ध कर सकते हैं। फिर आप गिट लॉग के माध्यम से जा सकते हैं और खराब शाखा विलय से जुड़े सटीक प्रतिबद्धता को खींच सकते हैं।

संपादित करें: लेखक की टिप्पणी के जवाब में, आप एक निश्चित लाइन फिर 'Git diff' ग्रेप और द्विआधारी खोज के साथ संयुक्त हो सकता है कि आप क्या चाहते के लापता होने के लिए देख रहे हैं। मान लें कि आपके पास संख्या 0,1,2,3,4,5,6 है। आप जानते हैं कि रेखा संशोधन 0 में मौजूद थी, लेकिन संशोधन 6 में गायब हो गई। गायब होने के लिए 'गिट diff' प्लस grep का उपयोग करें।

git diff 0 6 | grep '- line I care about' 

पहला पुनरावृत्ति, आपको वह रेखा दिखाई देगी जिसे आप गायब होने की परवाह करते हैं। , तो आप को पता है कि रेखा 3. करने के लिए संशोधन 0 में गायब हो गया है - तो फिर तुम छमाही में ग्रेप अभी भी लाइन गायब ('' पर हस्ताक्षर के साथ) से पता चलता है संशोधन संख्या में कटौती करने और फिर से

git diff 0 3 | grep '- line I care about' 

कोशिश ग्रेप लाइन गायब है, तो लाइन संशोधन 4-6 में गायब हो गया नहीं दिखाती है।

छमाही में संशोधन काटने जब तक आप अपराधी को खोजने रखें।

+0

समस्या यह थी कि "विलय त्रुटि" के बाद रेखा को कुछ समय तक छुआ था। मुझे पता था कि पैच कब पेश किया गया था लेकिन जब यह पहली बार बाहर निकला तो आसानी से नहीं बता सका। – Atlas1j

+1

इसके बजाय गिट डिफ और सर्च गिट लॉग प्रदान करने वाले विकल्पों का उपयोग करें। विशेष रूप से, 'गिट लॉग .. -S "लाइन मुझे परवाह है" - डिफ-फ़िल्टर = एम' –

+2

आपके द्वारा वर्णित प्रक्रिया यह है कि गिट बिसेक्ट क्या करता है। हालांकि, आपको हैश गिनने की ज़रूरत नहीं है। जबकि आपका 0-6, 0-3/4-6, आदि पैटर्न स्पष्ट और समझ में आता है, आप प्रतिबद्ध संख्याओं का उपयोग नहीं कर सकते हैं। आपको प्रतिबद्ध हैश का उपयोग करना होगा और यह स्पष्ट नहीं है। गिट bisect आपका दोस्त है। –

10

अधिक जानकारी के बिना मैं केवल पर समाधान पर संकेत दे सकता हूं। आप फ़ाइल या लाइन प्रभावित जानते हैं, तो आप कोशिश कर सकते हैं या तो git-blame (git blame *file*, या git blame *revision* *file*), या आप तो 'गैंती खोज' git-log साथ कहा जाता है की कोशिश कर सकते हैं, यानी git log -S'*line* संशोधन जो लाइन दी शुरू की, या नष्ट कर दिया दिया खोजने की कोशिश लाइन। (; संयुक्त diff वैकल्पिक रूप से -c शो लेकिन तुच्छ मर्ज परिवर्तन दिखाई नहीं देता, यानी अगर एक तरफ ले जाया गया था सभी माता पिता को -m शो डिफ) आप पा सकते हैं और git log -p -m --grep=Merge के माध्यम से उदाहरण के लिए सभी का आपस में विलय की जांच, और जांच कैसे वे अपने माता-पिता से संबंधित ।

0

एक सरल समाधान की तलाश में दूसरों के लिए, gitk ऊपर आग (या से Git जीयूआई भंडार पर जाएं> कल्पना एक्स इतिहास) और इसकी खोज उपकरण का उपयोग।

9

Git लॉग शक्तिशाली खोज विकल्प है।वहाँ संकेत आप कोड है कि गायब हो गया का एक हिस्सा पता हो सकता है के बाद से, आप कोड की है कि स्ट्रिंग

git log <HERE>..<THERE> -S"line I care about" --diff-filter=M

-S के बाद स्ट्रिंग के लिए वहाँ के लिए यहां से खोज करेंगे और केवल जहां लाइन संशोधित किया गया था के लिए खोज कर सकते हैं (जोड़ा या हटाया गया)

यदि आप -S के बजाय -G का उपयोग करते हैं तो आप अपनी खोज में और भी सटीकता प्राप्त कर सकते हैं। -जी स्ट्रिंग के साथ शाब्दिक खोज के बजाय नियमित अभिव्यक्ति खोज प्रदान करता है।

+0

यह बहुत अच्छा है! मुझे इसके बारे में पता नहीं था। धन्यवाद! –

+0

को और अधिक अपवॉट की आवश्यकता है ... –

+1

यह सारांश करने के बजाय पैच दिखाने के लिए -p विकल्प के साथ बहुत हाथ हो सकता है। तो आप वास्तव में मिलान करने वाले कार्यों के लिए परिवर्तन देख सकते हैं। – studgeek

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