Git - इंटरएक्टिव रिबेस को "दूषित" कैसे ठीक करें?


184

मैं अपने स्थानीय गिट रिपॉजिटरी में थोड़ा गड़बड़ करने में कामयाब रहा। मैं निम्नलिखित निर्देशों का उपयोग करके एक टूटी हुई प्रतिबद्धता को ठीक करने की कोशिश कर रहा था । "Git प्रतिबद्ध --amend" (और git rebase --interactive के बाद) चलाने से पहले मैंने फैसला किया कि मेरे परिवर्तन गलत थे और इसलिए मैंने "git रीसेट HEAD --hard" निष्पादित किया। एक अच्छा विचार नहीं है, मैं आपको बताता हूं।

अब इंटरेक्टिव रिबास "अटक" लगता है। Git वर्तमान शाखा को (! REBASE-m) के रूप में दिखाता है। प्रत्येक आदेश (सीडी .., ls, git rebase ...) मेरे भंडार के अंदर निम्नलिखित त्रुटि देता है:

cat: .it / rebase-merge / head-name: ऐसी कोई फ़ाइल या निर्देशिका नहीं

यहां बताया गया है कि git rebase --abort कैसा दिखता है:

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

यहाँ गिट रिबास का परिणाम है - कॉन्टिन्यू:

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

कोई विचार? इससे पहले कि मैं अपना सुविचारित रीबेस ऑपरेशन शुरू करूं, मैं स्थिति को वापस उसी स्थिति में रीसेट करना चाहूंगा।

यहां बताया गया है कि git log --online किस स्थिति को दर्शाता है:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

और यह ठीक है।

मैं msysgit v1.7.0.2 का उपयोग कर रहा हूं।


59
git rebase --quitमेरे लिए काम किया
जुआन कैइडो ने

जवाबों:


160

ऐसा लगता है कि गिट ने .git/rebase-mergeडायरेक्टरी को हटाने की कोशिश की, लेकिन इसे पूरी तरह से हटाने में सक्षम नहीं थे। क्या आपने उस फ़ोल्डर को कॉपी करने की कोशिश की है? .git/rebase-applyयदि मौजूद है तो भी फ़ोल्डर की प्रतिलिपि बनाएँ ।


7
यह बात बताने के लिए धन्यवाद। मैं सिर्फ कंप्यूटर को पुनरारंभ करके अपनी समस्या को ठीक करने में सक्षम था। मुझे यकीन नहीं है कि क्या गलत हो गया है क्योंकि किसी भी तरह .it \ rebase-merge फ़ोल्डर में हर एक्सेस "एक्सेस अस्वीकृत" -रोर का कारण बनता है।
मिकेल कोस्किनन 5

19
रीबूट मेरे लिए काम नहीं किया था, लेकिन git rebase --abort(से stackoverflow.com/a/4757777/146044 ) किया था काम।
बैकस

3
बस गिट शेल को git rebase --abort
खोलना

4
चेतावनी का एक शब्द ... जब मैं दूषित रीबेस त्रुटि पर ध्यान देता था, तो मेरी कार्यशील निर्देशिका में परिवर्तन के लायक 4 घंटे थे। git rebase --abortयह मेरे अस्थिर परिवर्तनों को मिटा देने की कोशिश की ... त्रुटि हालांकि गायब हो गई
जॉर्ज आनंद Eman

117
रिबूटिंग या git rebase --abortअभी भी मुझे त्रुटियाँ दीं। git rebase --quitमेरे लिए काम किया।
फ्लेवियो रोड्रिग्स

198

मैं इसी में फंस गया। मैंने हेड-नाम फ़ाइल बनाई, और फिर मैं यह कहते हुए एक और त्रुटि में भाग गया कि यह फ़ाइल पर नहीं मिल सकती है, इसलिए मैंने वह फ़ाइल बनाई। फिर मुझे एक और त्रुटि यह कहते हुए मिली कि '.it / rebase-apply / on' नहीं पढ़ सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं।

इसलिए मैंने रीटासिंग के लिए गिट डॉक्यूमेंटेशन को देखा और एक और कमांड पाया:

git rebase --quit

इसने मुझे अपनी शाखा में बिना किसी परिवर्तन के वापस सेट कर दिया, और मैं अपना रिबास फिर से शुरू कर सकता था, नए रूप में अच्छा।


51
git rebase --quitयह था!
स्टीवन शॉ

5
--quitकाम किया। --abortऐसा इसलिए नहीं था क्योंकि
रिबास को

1
मेरे पास समान रिबास-संबंधित त्रुटि थी, बस अलग-अलग त्रुटि संदेश के साथ। की कोशिश की: $ git rebase --abortआउटपुट: error: could not read '.git/rebase-apply/head-name': No such file or directory: अंत में, इस समाधान मेरी समस्या का समाधान होताgit rebase --quit
एएफएफ

Upvoted। git rebase --quitबिल्कुल मुझे बचाया। जैसा कि वर्णित है, वैसे ही लक्षण, लेकिन खान एक करने की कोशिश करने के बाद आया git pull --rebase, जो किसी कारण से विफल हो गया। ध्यान दें कि मेरे पास ऑटोस्टैश सक्षम था (git संस्करण 2.27.0.windows.1) और उसी समय VS2019 चल रहा था (उस पर रेपो इंगित किया गया था) - इन गड़बड़ के कुछ संयोजन पर संदेह करें।
एर्रोडोड

90

मैं एक ज़ोंबी vim.exe प्रक्रिया के कारण इसी तरह की समस्या थी। टास्क मैनेजर में इसे मारना, उसके बाद एक git rebase --abortतय करना।


यह मेरी समस्या भी थी। मैंने handlesysinternals कमांड का इस्तेमाल किया और देखा कि एक प्रोसेस (sh.exe) में फाइल लॉक थी। pskill <pid>मेरे लिए यह तय का उपयोग करना ।
पॉल ओलिवर

मेरे पास एक ही मुद्दा था, लेकिन मेरे लिए उदात्त पाठ के साथ।
इनवो सेवेन

35

धन्यवाद @Laura स्लोकम आपके उत्तर के लिए

मैंने रिबास करते समय चीजों को गड़बड़ कर दिया और एक के साथ एक अलग सिर मिला

 error: could not read orig-head

जिसने मुझे रिबासिंग खत्म करने से रोका।

अलग किए गए HEAD में मेरा सही रिबेट वांछित स्थिति है, इसलिए मैं भाग गया

rebase --quit

और उसके बाद मैंने एक नई अस्थायी शाखा की जाँच की ताकि वह अलग हो जाए।

जिस शाखा से मैं पुन: जुड़ना चाहता था, उसकी तुलना करके, मैं देख सकता हूँ कि नई अस्थायी शाखा ठीक उसी स्थिति में है जिस स्थिति में मैं पहुँचना चाहता था। धन्यवाद


7

ग्रहण में भी यही समस्या थी। ग्रहण नहीं कर सका => ग्रहण से गर्भपात।

निष्पादित Git रिबेस --abort Git बैश मेरे लिए काम किया है।


7

विंडोज पर, अगर आप नीचे देख रहे मशीन को पुनरारंभ करने में असमर्थ या असमर्थ हैं।

स्थापित करने की प्रक्रिया एक्सप्लोरर: https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

प्रोसेस एक्सप्लोरर में, फाइंड हैंडल या डीएलएल खोजें ...

त्रुटि में उल्लिखित फ़ाइल नाम में टाइप करें (मेरी त्रुटि के लिए यह 'git-rebase-todo' था लेकिन ऊपर दिए गए प्रश्न में 'किया गया')।

प्रोसेस एक्सप्लोरर फाइल पर लॉक रखने की प्रक्रिया को हाइलाइट करेगा (मेरे लिए यह 'grep' था)।

प्रक्रिया को मार डालो और आप मानक तरीके से गिट कार्रवाई को समाप्त करने में सक्षम होंगे।



3

मेरे मामले में ईटर git rebase --abortऔर git rebase --continueफेंक रहा था:

त्रुटि: '.git / rebase-apply / head-name' नहीं पढ़ सका: ऐसी कोई फ़ाइल या निर्देशिका नहीं

मैं मैन्युअल रूप से हटाकर इस समस्या को ठीक करने में कामयाब रहा: .git\rebase-applyनिर्देशिका।


2

मैं उपयोग कर रहा हूं git version 2.19.2.windows.1

केवल एक चीज जो मेरे लिए काम करती थी वह थी .git/rebase-apply/डायरेक्टरी को हटाना और ए git reset --hard


1

मेरे मामले में ऐसा इसलिए था क्योंकि मैंने संबंधित Git प्रोजेक्ट में SmartGit's Log और संबंधित प्रोजेक्ट डायरेक्टरी में Total Commander खोला था। जब मैंने दोनों को बंद किया तो मैं बिना किसी समस्या के रिबेट करने में सक्षम था।

जितना मैं इसके बारे में सोचता हूं, उतना ही मुझे कुल कमांडर पर संदेह होता है, यानी विंडोज में ओपन डायरेक्टरी पर ताला लगा होता है, जिस पर गिट रिबेस कुछ करने की कोशिश कर रहा होता है।

अनुकूल सलाह: जब आप किसी चीज़ को ठीक करने की कोशिश करते हैं, तो हमेशा एक समय में एक बदलाव करें। ;)


1

मैंने ऊपर वर्णित सभी चरणों की कोशिश की है, लेकिन मेरे लिए कुछ भी काम नहीं किया। अंत में, कंप्यूटर को पुनरारंभ करना इस मुद्दे के लिए काम किया: डी


1

विंडोज पर SublimeText 3 के साथ, इंटरेक्टिव कमिट एडिशन के लिए उपयोग की जाने वाली सबलाइम विंडो को बंद करके समस्या को ठीक किया जाता है।


0

एक बार जब आप संतोषजनक ढंग से एक्स नंबर की रीमासिंग को पूरा कर लेते हैं, तो अंतिम कमांड होनी चाहिए git rebase --continue। यह प्रक्रिया पूरी करता है और रिबास मोड से बाहर निकलता है।


0

मुझे भी यही समस्या थी। मैंने अन्य पोस्ट में सुझाव के अनुसार प्रोसेस एक्सप्लोरर का उपयोग किया (मैं उस पोस्ट को खोजने में सक्षम नहीं हूं) और पता लगाया कि किस प्रक्रिया में फ़ाइल पर ताला है और इसे मार दें। फिर जरूरत के अनुसार - कॉन्टिन्यू या --बोर्ट का निष्पादन करें


0

मेरे सभी विकल्पों के परीक्षण के बाद मेरे मामले में और अभी भी समस्याएँ हैं, मैंने कोशिश की sudo git rebase --abortऔर इसने पूरी बात की


यदि आप इसे वास्तविक रिबेस के बीच में कर रहे हैं तो सावधान रहें। बस मेरे परिवर्तन खो दिए: '(
फ्रीमैन एल

इसे "भ्रष्ट" माना जाता था, तब आप
रिबास के

0

बाकी सब कोशिश की, लेकिन एक रिबूट, मेरे लिए क्या काम किया है rm -fr .git/REBASE_HEAD


0

यदि आप राज्य से नीचे आते हैं और छूट नहीं मिलती है,

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

फिर पहले भागो,

$ git rebase -quit

और फिर पिछले राज्य को फिर से बेचना,

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

का उपयोग करना,

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

-3

मैं ग्रहण में गिट का उपयोग कर रहा हूं और मुझे भी यही समस्या हो रही थी।

आखिरकार मैंने पाया कि "रिबेस ..." मेनू प्रविष्टि अस्थायी रूप से एक उप-मेनू में बदल गई थी।

टीम-> रिबेस -> एबोर्ट

इसने मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.