2010-08-08 18 views
7

मान लें हम भंडार और 5 करता है:क्या यह काम रद्द करना संभव है?

  • प्रतिबद्ध 1
  • प्रतिबद्ध 2
  • प्रतिबद्ध 3
  • प्रतिबद्ध 4

प्रतिबद्ध और अब मुझे पता करता है 4 और 5 एक बुरा विचार है। मैं प्रतिबद्धता 4 और 5 में किए गए सभी परिवर्तनों को पूरी तरह से हटाना चाहता हूं। इसे कैसे करें?

+0

यदि आप किसी सार्वजनिक भंडार में धकेल गए हैं तो मैं वापस लौट जाऊंगा। अन्यथा कोई अन्य विकल्प ठीक है। – xenoterracide

उत्तर

4

git revert commit_hash

यह दिया reverts प्रतिबद्ध। ध्यान दें कि वापस एक और प्रतिबद्धता है जो प्रतिबद्ध_शैश से परिवर्तन को त्यागती है, भंडार से दिए गए प्रतिबद्धता को नहीं हटाती है।

3

मैं शायद एक नई शाखा बना सकते हैं 3.

git checkout -b commit3 

प्रतिबद्ध से और फिर उस से मास्टर rebase प्रतिबद्ध

http://git-scm.com/docs/git-rebase

निश्चित रूप से

, आप विषय शाखाओं का उपयोग कर रहे रखने के लिए अपने देव शाखाएं जब तक आप जानते हैं कि वे एक अच्छा विचार नहीं हैं, है ना?

6

4 करता है तो और 5 केवल अपने भंडार में कर रहे हैं और करने के लिए धक्का दिया नहीं किया गया है या किसी अन्य खींच लिया भंडार से आप बस कर सकते हैं: --hard SHA1_HASH_OF_COMMIT_3

आप रीसेट

Git git log का उपयोग करके एक प्रतिबद्धता के SHA1 हैश का पता लगा सकते हैं या आप अधिक उन्नत नामकरण तकनीकों का उपयोग कर सकते हैं, विशेष रूप से 'विशिष्टता पुरस्कार' अनुभाग में git help rev-parse देखें।

इस कमांड का उपयोग शाखा की नोक से 4 और 5 पहुंचने योग्य नहीं होगा। हालांकि, काम नहीं किया जाएगा क्योंकि उन कामों को शाखा के रिफ्लॉग में रखा जाता है। एक पहुंच योग्य प्रतिबद्धता की पहचान के लिए आप git reflog का उपयोग कर सकते हैं। पुनर्स्थापित करने के बाद git reset --hard के साथ किया जा सकता है। यह पृष्ठ here यह सब कुछ अच्छी तरह से वर्णन करता है।

यह अनुशंसा की जाती है कि आप नियमित आधार पर git gc चलाएं; कुछ आदेश स्वचालित रूप से आपके लिए भी करते हैं। यह अनिवार्य रूप से भंडार पर 'हाउसकीपिंग' करता है, जैसे "फ़ाइल संशोधन को संपीड़ित करना (डिस्क स्थान को कम करने और प्रदर्शन में वृद्धि) और पहुंचने योग्य वस्तुओं को हटाने"। पहुंचने योग्य वस्तुओं को 30 दिनों के बाद (डिफ़ॉल्ट) के बाद भंडार से हटा दिया जाता है। इसे कॉन्फ़िगरेशन विकल्प gc.reflogExpireUnreachable का उपयोग करके बदला जा सकता है।

+0

"जब तक आप 'git gc' चलाते हैं" भ्रामक है - यह स्वचालित रूप से स्वयं को आमंत्रित करता है, और उपयोगकर्ता को आमतौर पर इसे चलाने की आवश्यकता नहीं होती है। प्रतिबद्धता को तब तक पहुंचने योग्य नहीं माना जाएगा जब तक कि यह रीफ्लॉग में न हो, जो समाप्त होने के लिए 90 दिन लगते हैं। यहां तक ​​कि यदि आप शाखा को हटाते हैं (और इसके साथ इसके रीफ्लॉग) डिफ़ॉल्ट केवल 30 दिनों से पुरानी वस्तुओं को छीनने के लिए है। उपरोक्त: यह जल्द ही कभी नहीं जा रहा है। – Cascabel

+0

@ जेफ्रोमी मैं सहमत हूं, यह भ्रामक है। काफी उत्साहित उत्तर के लिए माफ़ी। मैंने थोड़ा और विस्तार से अपना जवाब अपडेट कर लिया है। –

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