2010-08-24 16 views
123

के गिट क्लोन विशेष संस्करण एक महीने पहले मैंने रिमोट गिट रिपोजिटरी को क्लोन किया था। रिमोट रिपोजिटरी में कई बदलाव हुए हैं और अब अस्थिर हो गए हैं। अब मुझे एक महीने पहले क्लोन किए गए एक के समान भंडार की एक और प्रतिलिपि की आवश्यकता है।रिमोट रिपोजिटरी

मैं यह कैसे कर सकता हूं?

+0

http://stackoverflow.com/questions/3489173/how-to-clone-git-repository-with-specific-revision-changeset की संभावित डुप्लिकेट –

उत्तर

174

आप अपनी रिपोजिटरी को किसी भी प्रतिबद्धता (जैसे 1 महीने पहले) में "रीसेट" कर सकते थे। उस के लिए

उपयोग git-reset:

git clone [remote_address_here] my_repo 
cd my_repo 
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT] 
+21

आप इसे का उल्लेख नहीं था, लेकिन यह केवल होगा 'मास्टर' शाखा को रीसेट करें, जिसे क्लोन पर डिफ़ॉल्ट रूप से चेक आउट किया गया है। यदि 'मास्टर' के अलावा कोई शाखा आपकी मुख्य विकास शाखा है जिसे पहले 'गिट रीसेट' –

+0

@ स्टेव सच से पहले चेक आउट किया जाना चाहिए! +1 –

+10

आप वांछित प्रतिबद्धता का सरल चेकआउट क्यों नहीं करेंगे? – nemoo

28

उपयोग git log संशोधन आप के लिए रोलबैक करना चाहते हैं, और प्रतिबद्ध हैश को ध्यान में रखना। उसके बाद, आप 2 विकल्प हैं:

  1. आपको लगता है कि संशोधन के बाद कुछ भी करने की योजना है, मेरा सुझाव है आप एक नई शाखा करने के लिए चेकआउट करने के लिए: git checkout -b <new_branch_name> <hash>

  2. ऐसा न करने पर उस संशोधन के बाद कुछ भी करने की योजना है, आप बस शाखा के बिना चेकआउट कर सकते हैं: git checkout <hash> - नोट: यह आपके भंडार को 'अलग सिर' राज्य में रखेगा, जिसका अर्थ है कि वर्तमान में यह किसी भी शाखा से जुड़ा नहीं है - फिर you'll have some extra work to merge new commits to an actual branch

उदाहरण:

$ git log 
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75 
Author: Jardel Weyrich <suppressed> 
Date: Wed Aug 18 20:15:01 2010 -0300 

    Added a custom extension. 

commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7 
Author: Jardel Weyrich <suppressed> 
Date: Wed Aug 18 20:13:48 2010 -0300 

    Missing constness. 

$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7 
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7' 
which isn't a local branch 
If you want to create a new branch from this checkout, you may do so 
(now or later) by using -b with the checkout command again. Example: 
    git checkout -b <new_branch_name> 
HEAD is now at 4553c14... Missing constness. 

इस तरह आप किसी भी जानकारियां खोना नहीं है, इस प्रकार आप एक नए संशोधन में जा सकते हैं, जब यह स्थिर हो जाता है।

+2

लेकिन यह भी नहीं कि आप एक अलग सिर पर हैं, जो केवल पढ़ने के लिए ठीक है। लेकिन जब आप इस संशोधन में बदलाव करना चाहते हैं, तो आपको एक नई शाखा बनाना होगा। अधिक जानकारी के लिए http://sitaramc.github.com/concepts/detached-head.html देखें। – Rudi

+0

@ रुडी: धन्यवाद। यह उपयोग दिखाने के लिए सिर्फ एक उदाहरण था। इसका उल्लेख करने के लिए अद्यतन किया गया। – jweyrich

+0

"काम करने की स्थिति" पर वापस जाने के लिए आप केवल 'गिट चेकआउट विकास' कर सकते हैं जहां विकास आपकी शाखा का नाम है। –

0

स्रोत पेड़ जो आपको चाहिए, अभी भी गिट रिपोजिटरी के भीतर उपलब्ध है, हालांकि, आपको उस प्रतिबद्धता के SHA1 की आवश्यकता होगी जिसमें आप रुचि रखते हैं। मुझे लगता है कि आप वर्तमान क्लोन से SHA1 प्राप्त कर सकते हैं?

यदि आप वह SHA1 प्राप्त कर सकते हैं, तो आप समान भंडार रखने के लिए वहां एक शाखा/रीसेट कर सकते हैं।

रुई के जवाब

2

केंद्रीकृत संस्करण नियंत्रण प्रणालियों के विपरीत के अनुसार आदेश, Git क्लोन पूरे भंडार है, तो आप केवल वर्तमान दूरस्थ फ़ाइलें नहीं मिलता है, लेकिन पूरे इतिहास। आप स्थानीय भंडार में यह सब शामिल करेंगे।

उस समय एक विशेष संस्करण को चिह्नित करने के लिए टैग हो सकता है। यदि नहीं, तो आप उन्हें स्वयं स्थानीय रूप से बना सकते हैं। ऐसा करने का एक अच्छा तरीका git log या शायद सभी शाखाओं और टैग देखने के लिए gitk (शायद gitk --all) जैसे उपकरणों के साथ अधिक दृष्टि से उपयोग करना है। यदि आप उस समय काम करने वाले हैंश को स्पॉट कर सकते हैं, तो आप उन्हें git tag <hash> का उपयोग करके टैग कर सकते हैं और फिर उन्हें नई कामकाजी प्रतियों में देखें (उदाहरण के लिए git checkout -b new_branch_name tag_name या सीधे टैग नाम के बजाय हैश के साथ)।

-1

मैं एक (अपने आप उदाहरण के लिए) एक निश्चित लेखक द्वारा प्रतिबद्ध रहा हूँ जब मैं आप इस क्रम में बस

git checkout commithash 

उपयोग कर सकते हैं

git log --author=[authorname] 
+3

यह प्रश्न का उत्तर नहीं देता –

48

साथ लॉग को फ़िल्टर

git init  
git clone `URLTORepository` 
cd `into your cloned folder` 
git checkout commithash 

प्रतिबद्ध हैश इस तरह दिखता है "45ef55ac20ce2389c9180658fdba35f4a663d204"

+3

मुझे यह जवाब सबसे अच्छा लगता है। मुझे लगता है कि 'गिट रीसेट - हैश' के पक्ष में 'गिट रीसेट - हार्ड' से बचा जाना चाहिए। एक 'गिट रीसेट - हार्ड' गिट इतिहास का हिस्सा हटा देता है जो कभी-कभी वांछनीय नहीं होता है। –

0

शायद git reset आपकी समस्या हल करता है।

git reset --hard -#commit hash- 
संबंधित मुद्दे