Git का कहना है कि स्थानीय शाखा दूरस्थ शाखा के पीछे है, लेकिन ऐसा नहीं है


82

परिदृश्य:

  1. मैं एक नई शाखा बनाता हूं
  2. उस पर हैक करें
  3. इसे कमिट करें
  4. धक्का दो
  5. उस पर कुछ और हैक करें
  6. फिर से कमिट करें
  7. फिर से पुश करने की कोशिश करें

Git का जवाब:

अद्यतनों को अस्वीकार कर दिया गया क्योंकि आपकी वर्तमान शाखा की नोक इसके दूरस्थ समकक्ष के पीछे है। आदि।

मैं इस शाखा पर केवल एक हैकिंग कर रहा हूं - कोई और इसे छू नहीं रहा है। दूरस्थ शाखा वास्तव में स्थानीय शाखा के पीछे है। मुझे बिल्कुल नहीं खींचना चाहिए था।

(और अगर मैं खींचता हूं, तो गिट दोनों के बीच संघर्ष की रिपोर्ट करता है, और मुझे शाखा को खुद में विलय करने के लिए मजबूर करता है)

ऐसा (संभावना) क्यों हो रहा है? और मैं इसका निदान / निदान कैसे कर सकता हूं?

स्पष्ट होने के लिए, मैं कहीं भी शाखा नहीं लगा रहा हूं, और कोई भी इस पर काम नहीं कर रहा है:

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

C, B की सीधी निरंतरता है, जिसमें कोई शाखा शामिल नहीं है। लेकिन git को लगता है कि C A की एक शाखा है:

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

यह; यह B की सीधी निरंतरता है।


1
का उत्पादन ( git remote -vऔर git show remote originयह मानते हुए कि आप जिस समस्या से परेशान हैं, वह मूल है) सहायक हो सकता है
बेन ग्राहम

जवाबों:


196

आपने शायद कुछ इतिहास पुनर्लेखन किया है? आपकी स्थानीय शाखा सर्वर पर एक से निकली है। क्या हुआ, इसकी बेहतर समझ पाने के लिए इस कमांड को चलाएं:

gitk HEAD @{u}

मैं दृढ़ता से आपको यह समझने की कोशिश करने की सलाह दूंगा कि यह त्रुटि कहां से आ रही है। इसे ठीक करने के लिए, बस चलाएं:

git push -f

-fयह एक "मजबूर धक्का" बनाता है और अधिलेखित कर देता है सर्वर पर शाखा। जब आप टीम में काम कर रहे हों तो यह बहुत खतरनाक है। लेकिन जब से आप अपने दम पर हैं और सुनिश्चित करें कि आपकी स्थानीय स्थिति ठीक है, यह ठीक होना चाहिए। यदि ऐसा न हो तो आप इतिहास को खोने का जोखिम उठाते हैं।


13
वह यह था। चरण 2 में, मैंने एक "अमेंड लास्ट कमिट" किया, फिर धक्का दिया, फिर कुछ और हैक किया, फिर फिर से धक्का देने की कोशिश की। मैंने अमेंड के काम करने के तरीके को गलत समझा। धन्यवाद!
टिम जंके

4
यह वास्तव में उपयोगी लगता है - लेकिन क्या कोई 'HEAD @ {u}' वाक्यविन्यास की व्याख्या कर सकता है?
क्रिस

5
दोनों HEADऔर @{u}संदर्भित करने के लिए संदर्भित करता है। वे गिटक को बताते हैं कि कौन सी शाखाएँ प्रदर्शित करनी हैं। HEADवर्तमान में जाँच की गई शाखा को संदर्भित करता है, के @{u}लिए छोटा है HEAD@{u}, जो वर्तमान में जाँच की गई शाखा के अपस्ट्रीम शाखा का प्रतिनिधित्व करता है। इसलिए उदाहरण के लिए। master, वह आमतौर पर है origin/master
12

एक ही परिदृश्य था - एक रेस्क्यू करना और संघर्षों का विलय करना था। का उपयोग gitkकर बहुत मदद की!
ब्रिचिन्स 21

मुझे लगता है कि अगर मैं स्थानीय रूप से (नहीं ammend) कई सरल कमिट करता हूं, और धक्का देने की कोशिश करता हूं। मुझे पता है कि कोई और गीथब पर चीजें नहीं बदल रहा है। Gitk वास्तव में दिखाया गया था कि रिमोट स्थानीय की तुलना में अलग था, इसके बावजूद कि यह अपेक्षित है, इसे स्थानीय को रिमोट की तुलना में एक नए संस्करण के रूप में दिखाना चाहिए न कि रिमोट के रूप में एक कांटा के रूप में (जैसा दिख रहा है, मुझे यह बताने के लिए ज्यादा गिटक नहीं है)
कुंभ राशि

5

समाधान बहुत सरल है और मेरे लिए काम किया है।

इसे इस्तेमाल करे :

git pull --rebase <url>

फिर

git push -u origin master

4

यह मेरे साथ तब हुआ जब मैं विकसित शाखा को आगे बढ़ाने की कोशिश कर रहा था (मैं गिट प्रवाह का उपयोग कर रहा हूं)। किसी के पास मास्टर के लिए अपडेट अपडेट थे। इसे ठीक करने के लिए मैंने किया:

git co master
git pull

जो उन परिवर्तनों को प्राप्त किया। फिर,

git co develop
git pull

जो कुछ नहीं किया। मुझे लगता है कि त्रुटि संदेश के बावजूद पहले से ही विकसित की गई शाखा। सब कुछ अब तक है और कोई त्रुटि नहीं है।


0

इसका निदान करने के लिए, इस उत्तर का पालन करें

लेकिन इसे ठीक करने के लिए, यह जानते हुए कि आप इसे बदलने वाले केवल एक हैं, ऐसा करें:
1 - अपने प्रोजेक्ट का बैकअप लें (मैंने केवल फ़ाइलों को git के लिए किया था। / src फ़ोल्डर)
2 - git pull
3 - आपको कई "गड़बड़" फ़ाइलों पर बैकअप पुनर्स्थापित करें ( मर्ज संकेतक के साथ)

मैं कोशिश की, git pull -s recursive -X oursलेकिन मैं चाहता था जिस तरह से काम नहीं किया, यह एक विकल्प हो सकता है, लेकिन पहले बैकअप !!!

सुनिश्चित करें कि अंतर / परिवर्तन (git gui पर) कोई नहीं हैं। यह मेरा मामला है, इसमें विलय करने की कोई बात नहीं है, लेकिन गितुब कहता है कि मुझे विलय करना चाहिए ...

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