2010-12-05 6 views
46

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

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

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

उत्तर

2

पिछले संस्करण में ले जाने के लिएः

git checkout <version hash>

यहां अपना काम करो और

git commit --amend

के साथ प्रतिबद्ध मास्टर के लिए वापस जाने के लिए:

git checkout master

+1

यह काम नहीं करेगा। 'गिट रीसेट - हार्ड' ने अपनी मास्टर शाखा को पुरानी प्रतिबद्धता पर वापस इंगित किया, इसलिए 'गिट चेकआउट मास्टर' कुछ भी नहीं करेगा। – jtdubs

+0

सच है, सुधार के लिए धन्यवाद। आपको +1, मेरा जवाब भी हटा देगा लेकिन मुझे लगता है कि 'प्रतिबद्ध - आदेश' चरण पर्याप्त उपयोगी है –

+0

'--amend' क्या है? – Shafizadeh

8

आप केवल git checkout <commit-id> कर सकते हैं, जो भी आपको करना है, उसके बाद git checkout master नया कोड वापस पाने के लिए करें।

आप वास्तव में इसे जारी करने के लिए पुराने कोड को संशोधित करने की जरूरत है, तो आप शायद चाहिए:

git checkout -b my_release <commit-id> 
... prepare code for release ... 
... release code ... 
git checkout master 
git merge my_release 

इसके अलावा, मैं git flow पर्याप्त की अनुशंसा नहीं कर सकते हैं। यह सब कुछ आसान बनाता है।

35

आपका प्रश्न अस्पष्ट है। मुझे लगता है कि क्या आप के लिए पूछ रहे हैं यह है:

git push -f origin $old_commit_id:master

इस क्या करेंगे? origin की master शाखा के नए प्रमुख के रूप में $old_commit_idorigin पर प्रतिबद्ध होगा।

यदि आप यही चाहते हैं, तो आपको अपनी स्थानीय master शाखा को स्पर्श करने की आवश्यकता नहीं है।

+0

इससे मेरे लिए 'मास्टर (गैर-फास्ट-फॉरवर्ड) विफलता हुई। @jtdubs समाधान काम किया। –

+2

बस इसे मजबूर करने के लिए '-f' पास करें - हालांकि रिमोट रेपो को इसे प्रतिबंधित करने के लिए कॉन्फ़िगर किया जा सकता है। मैंने जवाब अपडेट कर लिया है। –

+0

मेरे लिए काम नहीं करता है, स्वीकृत उत्तर – MobileMon

64

आप ऐसा करते हैं और प्रतिबद्ध पिछले करने के लिए स्वामी को वापस लाना चाहते हैं:

git checkout master~1   # Checkout previous commit on master 
git checkout -b new_master  # Create branch for new master 
git branch -D master    # Delete old master 
git branch -mv new_master master # Make new_master master 

वैकल्पिक रूप से:

git reset --hard master~1  # Reset current branch to one commit ago on master 
+0

तो एक साल बाद मैं इसे देख रहा हूं और सोच रहा हूं कि यह करने का एक भयानक तरीका है। ओह ठीक है कम से कम यह समझने में कुछ आसान है। –

+0

हां यही कारण है कि मैं समझ गया, समझने में आसान, शायद आपको एक बेहतर तरीके से एक लिंक प्रस्तुत करना चाहिए था? –

+0

उपरोक्त। यह मेरे लिए काम किया – bFunc

7

मान लिया जाये कि एक तो जैसे ग्राफ प्रतिबद्ध:

| (A) ---------> (B) ----------> (C) 
|        ^
|        (master) 

आप पहले master चेकआउट करना चाहते हैं और एक शाखा बनाएं जो master curre कहां इंगित करे ntly है:

git checkout master 
git branch pointer master 

अब इस तरह दिखना चाहिए: अब जब कि तुम master की कगार पर हैं

| (A) ---------> (B) ----------> (C) 
|        ^
|      (HEAD, master, pointer) 

, हम ले जाने के लिए पीछे की ओर एक प्रतिबद्ध master शाखा बता दूँगा:

git reset master~1 

अब, master को एक स्थान वापस ले जाना चाहिए, लेकिन pointer शाखा अभी भी सबसे हालिया प्रतिबद्धता पर है:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   (HEAD, master) (pointer) 

इस बिंदु पर, आप किसी दूरस्थ, या जहां कभी करने के लिए master धक्का कर सकते हैं, तो तेजी से आगे इसे वापस मर्ज pointer शाखा पर निर्भर है। आप उस बिंदु पर pointer शाखा को मार सकता है:

git push origin master 
git merge --ff-only pointer 
git branch -D pointer 

अंतिम:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   [ origin/master ] (HEAD, master) 
+0

यदि मूल/मास्टर सी पर है, तो 'गिट पुश मूल मास्टर' आपकी वर्तमान शाखा की नोक के साथ असफल हो जाएगा रिमोट counterpart_। आपको एक-एफ ध्वज भी पास करना चाहिए। – sassospicco

+0

'गिट रीसेट मास्टर ~ 1' जो मुझे चाहिए --- धन्यवाद! – cxw

7

उपयोग git reset --hard <old commit number>

यह इस वर्ष के लिए प्रमुख रीसेट कर देगा के लिए प्रतिबद्ध।

इसके अतिरिक्त, आपको रिमोट रेपो को बदलने के लिए git push -f origin का उपयोग करने की आवश्यकता है।

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

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