मैं वर्तमान में गिट की कई सामग्री ट्रैकिंग सुविधाओं को देख रहा हूं। यह जानना बहुत अच्छा है कि गिट मुझे कोड को समझने की अनुमति देता है जिसे एक फ़ाइल से दूसरे में स्थानांतरित कर दिया गया है, लेकिन मैं सोच रहा हूं कि यह सुविधा विलय में संघर्ष समाधान करते समय उपयोग करने योग्य कैसे है।स्थानांतरित सामग्री को सही ढंग से मर्ज करने के लिए गिट कैसे प्राप्त करें (न केवल फाइलें)
मैं दो फ़ाइलों hello.cc
और bye.cc
बनाया है:
यहाँ परिदृश्य है। मैं एक शाखा topic
शुरू करता हूं और hello.cc
से bye.cc
पर कुछ कोड ले जाता हूं। अगर मैं अब git blame -C bye.cc
करता हूं तो मैं देख सकता हूं कि यह कोड मूल रूप से hello.cc
से आया है जो जानना अच्छा है। हालांकि अब मैं स्थानांतरित सामग्री के बिना मूल शाखा में स्विच करता हूं और hello.cc
में अनुभाग के भीतर कुछ कोड बदलता हूं जो कि अन्य प्रतिबद्धता में स्थानांतरित हो गया है। अगर मैं अब git merge topic
करता हूं तो मुझे hello.cc
के लिए संघर्ष मिलता है। हालांकि जब तक मैं एक diff3 शैली का उपयोग नहीं करता (जो मैं यद्यपि करता हूं), मैं केवल यह देख सकता हूं कि इस विधि को अन्य शाखा में hello.cc
से हटा दिया गया है, लेकिन यह नहीं कि बाद में इसे बदल दिया गया है। bye.cc
पर भी संघर्ष करना अच्छा होगा, क्योंकि यह जांचना आवश्यक होगा कि अन्य शाखाओं के उन परिवर्तनों को कोड में दोबारा लागू किया जाना है या नहीं। क्या यह किसी भी तरह से संभव है?
मुझे पता है कि मैं मैन्युअल रूप से पता लगा सकता हूं कि कोड git blame --reverse -C topic...
कर कर स्थानांतरित हो गया है। हालांकि, इस संभावना को समझने में मुझे थोड़ी देर लग गई और शायद अन्य लोगों को इसके बारे में पता नहीं चलेगा। दूसरे के लिए मैं आलसी हूं और शायद यह भूल जाऊंगा कि कोड स्थानांतरित हो सकता है। साथ ही मुझे यकीन नहीं है कि यह तब काम करता है जब कोड एक से अधिक फाइलों में स्थानांतरित हो जाता है।
इस स्थिति को यथासंभव सुरक्षित रखने का आपका तरीका क्या होगा?
संपादित:
मैं सिर्फ पता चला कि git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
भी पता लगाने के लिए जहां सामग्री ले जाया गया काम करता है। और अगर मैं सही ढंग से गिट समझता हूं, तो यह शायद तेज़ है, क्योंकि यह पूर्ण भंडार में सामग्री की पूर्ण खोज नहीं करेगा।
संपादित:
मैं भंडार मैं उपयोग कर रहा हूँ अपलोड github के लिए चारों ओर खेलने ताकि आप अपने आप के लिए मर्ज की कोशिश कर सकते हैं। जिस प्रतिबद्धता को मैंने समारोह में स्थानांतरित किया वह विषय शाखा में है। वह वचन जहां शाखा में उसी कार्य को मास्टर merge_here
के हेड पर मास्टर में बदल दिया गया है। मास्टर में एक अतिरिक्त प्रतिबद्धता है जिसमें मैं कुछ अन्य विलय तकनीकों के साथ खेल रहा था, जिसे आपको इस प्रश्न के लिए अनदेखा करना चाहिए।
हाँ यकीन । मुझे यह पता है। लेकिन गिट को पाने के लिए सबसे अच्छा तरीका क्या है कि मुझे उपकरण के उपयोग के माध्यम से या संघर्ष विलय के माध्यम से, प्रतिबद्धता में क्या डालना है, इस पर संकेत देने और चेतावनी देने का सबसे अच्छा तरीका क्या है। – LiKao