2012-01-19 8 views
9

मैं अपने Git भंडार में दो प्रतिबद्ध बना दिया है से/फ़ाइल के लिए प्रतिबद्ध और उन्हें अपने Git सर्वर से धक्कापुल विशिष्ट Git

दो प्रतिबद्ध हैं

  • में पहली प्रतिबद्ध फ़ाइल एक
  • लिए प्रतिबद्ध है
  • दूसरा प्रतिबद्ध फ़ाइल बी में

लिए प्रतिबद्ध है अब अन्य विकास सर्वर पर मैं खींच केवल पहले प्रतिबद्ध या फ़ाइल एक च करना चाहते हैं रोम गिट सर्वर। यह कैसे करना है ?

+0

एक नई शाखा बनाएं जिसमें पहली प्रतिबद्धता है लेकिन दूसरा नहीं, और उस शाखा को चेकआउट करें? –

+0

@ थोंगकुआ धन्यवाद, लेकिन यह एक अच्छा तरीका नहीं है? कोई अन्य तरीका? – Dau

उत्तर

0

यह बहुत अधिक समझ में नहीं आता है - अगर आपने उन फ़ाइलों को किया जो आपके पास उनके रेपो में हैं।

हो सकता है कि यह तुम क्या चाहते है

git checkout -- FileAOnly 

या

git checkout origin/master -- FileAonly 
+1

चेकआउट आपके स्थानीय सिस्टम में पुराने काम से फ़ाइलों को पुनर्प्राप्त करने के लिए उपयोग किया जाता है। लेकिन मेरा सवाल यह है कि गिट सर्वर – Dau

+0

से विशिष्ट प्रतिबद्ध/फ़ाइल को कैसे खींचें संपादित उत्तर (+2 और वर्ण) –

+0

चेकआउट के साथ मूल/मास्टर उपयोग कर सकते हैं? – Dau

19

पहले, अपने विकास सर्वर पर, तो आप इस तरह Git सर्वर से प्रतिबद्ध की सूची लाने की आवश्यकता होगी:

git fetch origin master (or whatever branch you need) 

फिर आप जो चाहते हैं उसे प्राप्त करने के लिए कुछ विकल्प हैं:

चेरी पहली प्रतिबद्धता चुनें - यह केवल किसी अन्य शाखा/रेपो से चुनी गई प्रतिबद्धता को 'प्लक्स' करता है और इसे आपकी वर्तमान स्थानीय शाखा में लागू करता है। यह बहुत उपयोगी हो सकता है, लेकिन सावधानी के साथ प्रयोग किया जाना चाहिए (नीचे देखें)।

git cherry-pick <hash-of-commit-you-want> 

इस विशेष मामले में, आप

git cherry-pick FETCH_HEAD^ (gets commit before the HEAD of what's been fetched) 

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

git pull 
git reset --hard HEAD^ (or git reset --hard <hash-of-commit-you-want>) 

मैं दूसरा विकल्प पसंद करूंगा क्योंकि चेरी-पिकिंग के प्रभाव पर कुछ दस्तक हो सकती है यदि आप इससे सावधान नहीं हैं। मेरा मानना ​​है कि यह प्रतिबद्धता के लिए एक नया हैश बनाता है, इसलिए चेरी द्वारा उठाए गए प्रतिबद्ध और मूल प्रतिबद्धता समान नहीं हैं। मुझे डर है कि मेरे पास इस पर पढ़ने के लिए अभी समय नहीं है और पुष्टि करें कि नुकसान क्या है, लेकिन मैं दृढ़ता से अनुशंसा करता हूं कि यदि आप इसका उपयोग करने का निर्णय लेते हैं तो आप स्वयं के लिए इसकी जांच कर सकते हैं।

git fetch origin master 
git checkout FETCH_HEAD^ 

यह सब करता हासिल करेगा: -

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

+0

thanx, मुझे लगता है कि आपका पहला विकल्प मेरे लिए सही है, मैं सवाल पूछने पर दूसरा विकल्प चुनने के बारे में भी सोच रहा हूं लेकिन मैंने यह नहीं चुना क्योंकि मैं इसे गलत तरीके से सोच रहा हूं। बीटीडब्ल्यू मुझे – Dau

+0

को मेरे दिमाग में एक संदेह है कि अगर हम मूल मास्टर लाएंगे तो यह तुरंत कोड पर प्रभाव डालेगा 'और यह वह लाइव सर्वर है जिस पर मैं पुल लेने जा रहा हूं। इसलिए फ़ाइल बी कुछ समय के लिए सर्वर पर भी दिखाई देगी? – Dau

+0

आह, मैं देखता हूँ! मुझे एहसास नहीं हुआ कि यह एक लाइव सर्वर था। तुम सही हो। उस स्थिति में आपको अपनी इच्छित प्रतिबद्धता को चुनना चाहिए। या आप शायद उस चेकआउट को चेकआउट कर सकते हैं जो आप चाहते हैं कि विशिष्ट प्रतिबद्धता तक। –

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