अस्वीकरण: मैंने अब इसका परीक्षण किया है, और ऐसा लगता है जैसे यह अपेक्षित काम करता है (माना जाता है कि मैं आपको सही ढंग से समझता हूं)। हालांकि, अभी भी बहुत कुछ गलत हो सकता है। बिल्कुल अपने प्रोजेक्ट के भंडार की एक अलग काम करने वाली प्रति पर इसे आज़माएं, और इसे कहीं भी धक्का देने से पहले सबकुछ जांचना सुनिश्चित करें। ऐसा करने से पहले राज्य के पूर्ण निर्देशिका बैकअप रखें।
तो मुझे लगता है कि आपके पास दो स्वतंत्र भंडार हैं।मूल परियोजना (Gephi):
A---B---C---D---E
^HEAD of Gephi
और अपनी परियोजना, जिनकी पहली संशोधन मूल परियोजना के अंतिम संशोधन के समान लगता है:
E'---V---W---Y---...---Z
^HEAD of your project
(संभवतः कुछ शाखाओं के साथ है, लेकिन यह वास्तव में बात नहीं करता है । यहाँ)
आप करना चाहते हैं क्या (यदि मैं सही ढंग से समझ में आ) है:
A---B---C---D---E---V---W---Y---...---Z
आप निम्न कोशिश कर सकते हैं। फिर, इसे अपने आप, अलग-अलग काम करने वाले पेड़ पर करें, और यह सुनिश्चित करें कि किसी भी केंद्रीय भंडार को इसे धक्का देने से पहले सब कुछ ठीक है!
अपने खुद के काम कर पेड़ की निर्देशिका में, सिर और मूल Gephi भंडार की वस्तुओं लाने जबकि:
git fetch /path/to/original/gephi
आप Gephi भंडार क्लोन नहीं है, तो आप के रूप में अच्छी GitHub निर्दिष्ट कर सकता है एक स्थानीय फाइल सिस्टम पथ के बजाय यूआरएल।
यह आपके वर्तमान कार्यशील पेड़ में निम्नलिखित स्थिति में परिणाम होगा:
A---B---C---D---E
^FETCH_HEAD
E'---V---W---Y---...---Z
^HEAD
हम एक बहुत नहीं बदला है। वर्तमान में, दोनों सिर एक दूसरे से शांतिपूर्वक और पूरी तरह से स्वतंत्र रूप से सह-अस्तित्व में हैं, लेकिन अब आपके पास दोनों भंडारों से वस्तुओं तक पहुंच है और उन्हें गठबंधन करने का प्रयास कर सकते हैं।
अब हम ई त्यागने के लिए '(यह ई करने के लिए समान होना चाहिए), और बदले ई अपनी परियोजना के पहले प्रतिबद्ध के माता पिता, जो वी ऐसा करने के लिए है बनाना चाहते हैं, तो आप उपयोग कर सकते हैं git filter-branch
:
git filter-branch -f --parent-filter 'test $GIT_COMMIT = <V> && echo "-p <E>" || cat'
क्रमशः वी और ई के प्रतिबद्ध हैंश द्वारा <V>
और <E>
बदलें। उनको ढूंढने के लिए, आप अपने प्रोजेक्ट के कामों की जांच के लिए git log
कर सकते हैं और, क्योंकि हमने उन्हें Gephi के कामों की जांच के लिए git log FETCH_HEAD
लाया है।
यह प्रभावी ढंग से सीधे ई
को
वी कनेक्ट करेगा यह और भी काम करना चाहिए अगर यह मूल Gephi भंडार का पता चला है कि सिर (यानी नवीनतम प्रतिबद्ध) नहीं है कि तुम क्या, अर्थ पर अपनी परियोजना आधारित कि गेपी में नए काम रहे हैं कि आपने (अभी तक?) का ख्याल रखा है। बस सुनिश्चित करें कि <E>
को उस प्रतिबद्धता के हैश के साथ प्रतिस्थापित करें, जिस पर आपने पर अपने परिवर्तनों पर आधारित है।
इसके विपरीत, सुनिश्चित करें कि के के हैश के साथ आप पहले बनाते हैं। हो सकता है कि आपके भंडार में ई के समान ई शामिल न हो, लेकिन पहले ही प्रतिबद्धता में पहले से मूल में परिवर्तन शामिल हैं। फिर यह पहला प्रतिबद्ध हैश आपके <V>
होगा, इसके बाद इसके बाद।
संक्षेप में दोनों पिछले पैराग्राफ: उपरोक्त आदेश भी अपनी स्थिति, की तरह लग रहा है, तो उदाहरण के लिए काम करना चाहिए, इस:
A---B---C---D---E---F---G---H---I
^ ^FETCH_HEAD
point where your project branched off
V---W---Y---...---Z
^ ^HEAD
first change based on E
बस हैश कि इस संदर्भ में समझ बनाने के लिए प्रतिबद्ध का उपयोग सुनिश्चित करें।
मैंने अभी इसका परीक्षण किया है, और ऐसा लगता है (इसलिए मैंने शीर्ष पर अपनी चेतावनी अपडेट की है)। मैं अभी भी आपको एक डिस्पोजेबल काम करने वाले पेड़ पर और पूर्ण बैकअप बनाने की कोशिश करने की सलाह देता हूं। 'फ़िल्टर-शाखा 'कथन गलत है, या हैश को मिलाकर आसान है! –
यदि स्थानीय प्रोजेक्ट में कई शाखाएं हैं, या यदि इतिहास में कोई विलय हो, तो 'गिट रीबेस' सही टूल नहीं है क्योंकि यह इतिहास को रेखांकित करेगा। इसके बजाए 'फ़िल्टर-शाखा' का प्रयोग करें। –
धन्यवाद। यही वह था जो मैंने मूल रूप से किया था, लेकिन मैंने सोचा कि रिबेस में आसान वाक्यविन्यास था। मैंने अपने परिवर्तनों को वापस कर दिया और अब यह केवल फ़िल्टर-शाखा का उल्लेख करता है। –