2012-03-16 13 views
10

का उपयोग कर रिमोट रिपोजिटरी को धक्का देने के लिए एक प्रतिबद्धता को कैसे हटाया जाए, मैंने रिमोट रिपोजिटरी में कुछ कामों को धक्का दिया है और पाया है कि वे समस्याएं पैदा कर रहे हैं।गिट

मैं पिछले संस्करण पर कैसे जा सकता हूं? यही है, दो नवीनतम प्रतिबद्धताओं को हटा रहा है?

उत्तर

3

मुझे लगता है कि आप स्थानीय रूप से रोलबैक और परिणाम धक्का कर सकते हैं:

$ git reset HEAD^ --hard 
$ git push REMOTE -f 

कहाँ 'रिमोट' रिमोट नाम है।

+3

आप * ऐसा कर सकते हैं, लेकिन यह अचूक है क्योंकि इस दौरान काम करने वाले किसी भी व्यक्ति को ... बुरा शब्द से बचने के लिए, अच्छा कहें, "उन्हें अपने कार्यों से ठीक होने के लिए कड़ी मेहनत करनी होगी । " :-) एक नई प्रतिबद्धता को जोड़ने के लिए "गिट रिवर्ट" का उपयोग करना बेहतर है जो पिछली प्रतिबद्धता को पूर्ववत करता है। ("रिवर्ट" के बारे में सोचें "एक प्रतिबद्धता जोड़ें जिसका पैच पिछली प्रतिबद्धता को पूर्ववत करने की क्रिया है," क्योंकि यह वही है।) – torek

+0

@torek मैं पहले इस बारे में सोच रहा था, लेकिन मुझे लगता है कि शैडोफ़ैक्स के पास अन्य हो सकता है उद्देश्यों, जैसे हर दूरस्थ प्रतिबद्धता को सही ढंग से चलाने में सक्षम रखने के लिए, अन्यथा वह 'वापसी और धक्का' के बारे में सोचा होगा। – peter

+1

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

27

चूंकि आपने पहले ही रिमोट रिपोजिटरी में काम करने को धक्का दिया है, इसलिए संभवतः दो कामों को वापस करने का सबसे अच्छा तरीका है ताकि आप किसी भी व्यक्ति के लिए कोई समस्या न पैदा कर सकें जो पहले ही रिमोट रिपोजिटरी से खींचा गया हो।

उदाहरण निम्न प्रतिबद्ध इतिहास का उपयोग करें:

git revert e512d38 
git revert bd89039 

वैकल्पिक रूप से, अगर आप डॉन ':

e512d38 Adding taunts to management. 
bd89039 Adding kill switch in case I'm fired. 
da8af4d Adding performance optimizations to master loop. 
db0c012 Fixing bug in the doohickey 

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

git reset --hard da8af4d 
git push origin -f localBranch:remoteBranch 

जहां localBranch स्थानीय शाखा का नाम है और remoteBranch रिमोट शाखा का नाम है।

+3

"प्रबंधन के लिए taunts जोड़ने" पुराने (नए?) Adage को जन्म देता है, "पीना और धक्का"। :-) – torek

+6

@torek मैं क्या कह सकता हूं, मैं एक प्रतिबद्ध शराब पीने वाला और पीने वाला हूं। –

0

सबसे पहले इस आदेश को टाइप करें।

git log -n 4 

यह आदेश आपके पिछले 4 कामों को उनके SHA के साथ प्रदर्शित करेगा। इस प्रकार के बाद निम्न आदेश।

git rebase -i SHA_ID 

SHA_ID के बजाय प्रतिबद्धता से पहले प्रतिबद्धता के SHA टाइप करें जिसे आप हटाना चाहते हैं।

इसके बाद एक फ़ाइल खुल जाएगी, उस फ़ाइल के शीर्ष पर आप SHA और उस प्रतिबद्धता का संदेश देखेंगे जिसे आप हटाना चाहते हैं। इस लाइन को हटाएं और फ़ाइल से बाहर निकलें और बाहर निकलें।

जब आपने ऐसा किया है तो आपको धक्का देना होगा। तो निम्न आदेश टाइप करें।

git push -f origin master 

आपके साथ ऐसा करने के बाद आप देख सकते हैं कि आपकी प्रतिबद्धता हटा दी गई है।