रिबेट को रोलबैक कैसे करें


106

अगर आप इससे खुश नहीं हैं, तो Git में, आप एक रिबास कैसे रोलबैक करते हैं?

रीट के लिए Git में ड्राई-रन नहीं है। यदि मैंने एक रिबेस किया और इसे अभी तक नहीं बढ़ाया है, तो मैं पहले कैसे रोलबैक करूं, जैसे कि यह कभी नहीं हुआ?


4
git rebase --abort
olibiaz

2
आपका क्या मतलब है "विफल"? क्या आपने रिबेस पूरा किया, और आपको परिणाम पसंद नहीं आया? या आपने संघर्षों को मारा और विद्रोह को बीच में रोकना चाहते थे? मैं पूर्व का अनुमान लगाता हूं, क्योंकि आप एक विवादित, अधूरे छूट को आगे नहीं बढ़ा सकते हैं , लेकिन मैं पूछता हूं क्योंकि वे दो अलग-अलग प्रश्न हैं।
एडवर्ड थॉमसन

हाँ, पूर्व। धन्यवाद।
user1615666

जवाबों:


216

आप रिबॉज़ शुरू होने से पहले पहली कार्रवाई खोजने के लिए रीफ़्लॉग का उपयोग कर सकते हैं और फिर इसे वापस रीसेट कर सकते हैं। जैसे

$ git reflog

b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...

$ git reset HEAD@{2} --hard

अब आपको रिबास शुरू होने से पहले वापस आ जाना चाहिए।

रीसेट करने के लिए सही जगह खोजने के लिए, आप बस प्रविष्टि को सबसे ऊपर ले जाएँ जो "रिबेस" से शुरू न हो

वैकल्पिक दृष्टिकोण

यदि आपके द्वारा शाखा पर किया गया रिबास केवल एक ही चीज़ है , यानी आपके पास कोई अप्रकाशित / परिवर्तन नहीं है - तो आप बस के साथ स्थानीय शाखा को हटा सकते हैं git branch -Dऔर फिर इसे फिर से देख सकते हैं:

$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch

या उसी प्रभाव के लिए, आप मूल शाखा को रीसेट कर सकते हैं:

$ git reset --hard origin/my-branch

यदि आपने ऐसा किया जबकि आपके पास अन्य अप्रकाशित कमिट थे, तो आप उन्हें खो देंगे। उस स्थिति में केवल रिफ्लग प्रविष्टि में वापस जाने के लिए ऊपर दिए गए रिफ्लॉग दृष्टिकोण का उपयोग करें जहां आपने कमिट किया था।


11
एक अन्य आसान शॉर्टकट: रिबास ORIG_HEADशाखा के मूल हैश मान के लिए सेट किया जाता है, जिसे रीबेड किया जाता है। तो नंबर 2 के लिए खोजने के बजाय HEAD@{2}, आप बस उपयोग कर सकते हैं ORIG_HEAD... लेकिन केवल अगर ORIG_HEADअभी भी मौजूद नहीं है। Git कमांड का एक गुच्छा इसे (विभिन्न परिस्थितियों में रिबास, एम, रीसेट और मर्ज) सेट करता है।
torek

1
धन्यवाद महोदय! इस पर बड़ी मदद :)
एलेक

1
शुक्रिया मेरा सोर्स कोड वापस .... इस $ git रिसेट का उपयोग करने के बाद HEAD @ {2}
--हार्ड

स्थानीय शाखा को हटाने और इसे फिर से खींचने का सुझाव देने के लिए मेरा उत्थान हो जाता है!
Quicklikerabbit

1
यह एक जीवन रक्षक है। साभार @Robbie
नेल्सन

42

Rebase पुराने राज्य का बैकअप रखता है ORIG_HEAD
तो आप पिछले रिबास को चलाकर वापस कर सकते हैं:

git reset --hard ORIG_HEAD

1
क्या आपको पता है कि उस टैग का दस्तावेज कहां है?
बेन एस।

क्या इसमें कुछ नकारात्मक है या यह एक नई विशेषता है? यह एक reflog के माध्यम से स्थानांतरण की तुलना में बहुत आसान लगता है।
१२५२ --४

यह नया नहीं है। लेकिन आप आमतौर पर इसे रिबास के ठीक बाद उपयोग करेंगे, कई विद्रोहियों के बाद आदि पूर्वव्यापी तरीके से वापस नहीं जा सकते। इन जटिल परिस्थितियों के लिए आप फिर से सामान के लिए शिकार करेंगे, लेकिन "उफ़" के लिए, मैंने अभी क्या किया? मैं कैसे पलट सकता हूं अभी?" यह ठीक काम करता है।
मेलिगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.