2013-02-03 12 views
26

मैं अपने मूल SHA प्रतिबद्ध कोड को रखने के दौरान एक प्राप्त रिमोट पर एक प्रतिबद्धता चुनना चाहता हूं (मेरी वर्तमान शाखा इस रिमोट पर आधारित है जिसे मैंने पिछले राज्य में रीसेट किया था) ।चेरी-एक प्रतिबद्धता चुनें और मूल SHA कोड रखें

+10

मुझे लगता है कि आप गलत समझ रहे हैं कि प्रतिबद्ध हैश वास्तव में क्या है। –

+2

आप मूल SHA हैश क्यों रखना चाहते हैं? – siegi

उत्तर

37

एक Git SHA हैश जानकारी के विभिन्न टुकड़े से की जाती है:

  1. पेड़ यह करने के लिए संदर्भित करता है; मूल रूप से, शाखा में भंडार की वर्तमान सामग्री जिसमें प्रतिबद्धता प्रकट होती है।
  2. के SHA के एसएचए।
  3. संदेश संदेश भेजें।
  4. लेखक की जानकारी: नाम, ईमेल और टाइमस्टैम्प।
  5. कमिटर जानकारी: नाम, ईमेल और टाइमस्टैम्प।

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

+0

उपयोगी जानकारी के लिए धन्यवाद :) वास्तव में मैंने 'गिट शाखा मास्टर रिमोट/मास्टर' कमांड के साथ अपनी शाखा बनाई और जिसने मूल SHA को रखा ... फिर मैंने एक विशिष्ट प्रतिबद्धता पर रीसेट कर दिया, और अब मैं दूसरे को रीसेट करना चाहता हूं, हाल ही में एक लेकिन यह रेपो लॉग पर एक और बिंदु पर जाता है ... – blameless75

+0

वास्तव में जब मैं सीपी करने की कोशिश करता हूं प्रतिबद्धता मेरे पास उससे संबंधित सभी फाइलों पर "हमारे द्वारा हटाई गई" त्रुटि है ... यह अजीब है ... – blameless75

+0

संपादित करें: मेरी पिछली टिप्पणियों की उपेक्षा करें, मैंने रिमोट को मिश्रित किया है ... – blameless75

12

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

+0

वास्तव में रेपो लॉग पर यह अगली प्रतिबद्धता है, मैंने अपनी स्थानीय शाखा को प्रतिबद्ध प्रतिबद्धता के SHA पर रीसेट करने का प्रयास किया लेकिन फिर मेरी शाखा एक अलग स्थान पर है ... – blameless75

+0

ठीक है, अधिक सटीक होने के लिए, SHA हैश नहीं है पूरे repository_ के _state का प्रतिनिधित्व करते हैं, लेकिन एक _commit और इसका पूरा इतिहास_। भंडार में अच्छी शाखाएं हो सकती हैं और ... – siegi

+0

@siegi धन्यवाद, जोड़ा। "उस समय के पूरे भंडार की स्थिति" कुछ ऐसा था जो मुझे दिमाग में था, लेकिन हाँ, शाखाओं को भी – eis

3

अन्य उत्तरों के लिए आपकी टिप्पणियों के मुताबिक मुझे लगता है कि आप बस कुछ रिमोट प्रतिबद्धता को रीसेट करना चाहते हैं। ऐसा करने के लिए आप git reset --hard <SHA> का उपयोग कर सकते हैं। ध्यान दें कि यह कार्यशील निर्देशिका में आपके सभी (असामान्य) परिवर्तनों को त्याग देगा और आपके द्वारा इस शाखा में किए गए सभी काम अब तक पहुंच योग्य नहीं होंगे।

यदि यह वही नहीं है जो आप चाहते हैं (या आप निश्चित नहीं हैं) तो कृपया स्पष्ट रूप से वर्णन करें कि आपने क्या किया और आप क्या करना चाहते हैं या आप क्या करने की कोशिश कर रहे हैं।

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