GitHub को धक्का नहीं दे सकता - कहता है कि मर्ज की जरूरत है


743

मैं GitHub में नया हूं । आज मुझे कुछ मुद्दे मिले जब मैं अपने कोड को GitHub पर धकेलने की कोशिश कर रहा था।

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

मैंने भंडार में अभी तक कुछ भी नहीं डाला है, इसलिए मुझे कुछ खींचने की क्या आवश्यकता है?


6
ध्यान दें कि यह स्थानीय रूप से पहले देखी गई शाखाओं के लिए भी हो सकता है, जो अपस्ट्रीम रिपॉजिटरी में किए गए हैं। क्या इस तरह की पुरानी शाखा को तेजी से आगे बढ़ाने का एक आसान तरीका है या बस इसे स्थानीय रिपॉजिटरी में भूल जाने दें?
थोरबजोर्न रेवन एंडरसन

50
@ ThorbjørnRavnAndersen - मैंने 'git push -f' का उपयोग करके इस परिदृश्य को ठीक करने में कामयाबी हासिल की, जो ऐसा प्रतीत होता है कि git अपनी काल्पनिक समस्याओं के बारे में भूल गया है :)
Echelon

6
गिट न्यूकमर से इस बारे में शिकायत देखी। कारण यह है कि जब वे गिटहब पर एक नई परियोजना बनाते हैं, तो वे "रीडमी के साथ इनिशियलाइज़ेशन" या ".ignignore / GPL विकल्प" का चयन करते हैं, इसलिए नई परियोजना में पहले से ही एक प्रतिबद्धता है कि उनके पास स्थानीय रूप से नहीं है, इस प्रकार त्रुटि के कारण भ्रम पैदा होता है।
रुसलान कबालिन

4
@ इस्कॉन -f को बल देने का विकल्प खतरनाक है। मैंने सिर्फ एक टीम प्रोजेक्ट में इसका इस्तेमाल किया और 6 कमिट्स "स्ट्राइप्ड" थे, बस सर्वर से डिलीट कर दिया और उन्हें वापस लाने का कोई तरीका नहीं!
देलेप्लेस

42
गिट की प्रशंसा करने के लिए इसकी प्रवृत्ति। लेकिन लगभग हर डेवलपर ने मुझसे बात की, निजी तौर पर सहमत हैं कि वे व्यक्तिगत रूप से नफरत करते हैं। अब जब वे git का उपयोग करते हैं तो वे स्रोत नियंत्रण में इतना समय व्यतीत करते हैं, जितना कि वे तब खर्च करते थे जब वे perforce या TFS का उपयोग करते थे।
डेवलपर

जवाबों:


762

यह रिमोट रिपॉजिटरी को कम करने का कारण बन सकता है; इसका उपयोग सावधानी से करें।

आप (के साथ अंतर देख अपनी स्थानीय शाखा में दूरदराज के शाखा विलय करने के लिए नहीं करना चाहते हैं Git diff ), और एक बल धक्का करना चाहते हैं, का उपयोग -f साथ धक्का आदेश

git push -f origin <branch>

originआपके दूरस्थ रेपो का नाम कहां है ।

आमतौर पर, कमांड एक दूरस्थ रेफरी को अद्यतन करने से इंकार कर देता है जो इसे अधिलेखित करने के लिए उपयोग किए जाने वाले स्थानीय रेफरी का पूर्वज नहीं है। यह ध्वज चेक को निष्क्रिय करता है। यह रिमोट रिपॉजिटरी को कम करने का कारण बन सकता है; इसका उपयोग सावधानी से करें।


1
यह मेरे लिए एक रेपो के लिए काम करता है जो मेरे पास गितुब पर है लेकिन, मुझे अपने ऐप के भीतर हरोकू से एक सबमॉड्यूल मिला। और मुझे फ़ाइलों को सबमॉड्यूल से बाहर लाना था और फिर अद्यतन ऐप को हरोकू में धकेलना था।
जेगलार्डो

24
सुनिश्चित करें कि आप इस पोस्ट पर टिप्पणी की अंतिम पंक्ति पढ़ें! "यह रिमोट रिपॉजिटरी को कम करने का कारण बन सकता है, इसका उपयोग सावधानी से करें।" टीम के माहौल में जोर लगाना एक खतरनाक चीज है और आमतौर पर इससे बचना चाहिए।
एडम कालनास

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

यह भी ध्यान देने योग्य है कि यदि आप गितूब का उपयोग कर रहे हैं , तो यह आपके द्वारा हाल ही में किए गए एक खुले पुल अनुरोध को ओवरराइड कर सकता है। से Github डॉक्स : "बलपूर्वक भ्रष्ट कर सकते हैं अपने पुल अनुरोध धक्का"।
आर्मफूट

इसने मेरे लिए काम किया। मैंने कोशिश की है $ git pull origin master -vलेकिन यह त्रुटि देता है fatal: refusing to merge unrelated histories। फिर मैंने यह कोशिश की और यह काम कर गया और मेरी स्थानीय फाइलें गीथूब रिमोट रेपो पर दिखाई दीं।
वीर

238

जैसा कि संदेश आपको बताता है,

दूरस्थ परिवर्तनों को मर्ज करें (जैसे 'git पुल')

git pullदूरस्थ रिपॉजिटरी से अपने स्थानीय रिपॉजिटरी में नवीनतम परिवर्तनों को खींचने के लिए उपयोग करें । इस मामले में, परिवर्तनों को खींचने के लिए एक मर्ज की आवश्यकता होगी क्योंकि आपने अपने स्थानीय भंडार में परिवर्तन किए हैं।

मैं एक उदाहरण और समझाने के लिए एक चित्र प्रदान करूँगा। मान लेते हैं कि मूल / शाखा से आपका आखिरी पुल कमिट बी में था। आपने कुछ काम (कमिट सी) पूरा कर लिया है। इसी समय, किसी और ने अपना काम पूरा कर लिया है और इसे मूल / शाखा (कमिट डी) में धकेल दिया है। इन दो शाखाओं के बीच एक मर्ज होने की आवश्यकता होगी।

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

क्योंकि आप एक हैं जो धक्का देना चाहते हैं, Git आपको मर्ज करने के लिए मजबूर करता है। ऐसा करने के लिए, आपको पहले मूल / शाखा से परिवर्तन खींचना होगा।

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

मर्ज को पूरा करने के बाद, अब आपको अपने परिवर्तनों को आगे बढ़ाते हुए प्रतिबद्ध ई के लिए फास्ट-फॉरवर्ड मूल / शाखा की अनुमति दी जाएगी।

Git के लिए आवश्यक है कि आप अपने आप को मर्ज कर लें, क्योंकि मर्ज से संघर्ष हो सकता है।


7
यदि आप विलय नहीं करना चाहते हैं तो क्या होगा? और बस डी को एक साइड-ब्रांच के रूप में छोड़ दें (कम से कम अभी के लिए)। बाद में, मैं सी के बाद अधिक प्रतिबद्ध हो सकता हूं; डी। के बाद कोई और व्यक्ति अधिक अपराध कर सकता है। बिना मर्ज किए मैं साइड-ब्रांच को कैसे धक्का दे सकता हूं? ~~~
स्टीव पिचर

3
स्थानीय / शाखा और उत्पत्ति / शाखा एक ही शाखा का प्रतिनिधित्व करने के लिए होती है लेकिन विभिन्न मशीनों (स्थानीय बनाम मूल) पर; स्थानीय / शाखा को आगे बढ़ाने के लिए मूल / शाखा को अद्यतन करना है। यदि आप चाहते हैं कि आपकी शाखा की स्थिति दूसरों को दिखाई दे (अर्थात मूल पर) लेकिन आप मूल / शाखा के साथ विलय नहीं करना चाहते हैं, तो आपको स्थानीय / शाखा (गिट शाखा [नाम]) से एक नई शाखा बनानी चाहिए और उस शाखा को उत्पत्ति पर धकेलें (git push -u Origin [name])
Jake Greene

1
महान व्याख्या। यह वीडियो इस मुद्दे का एक संक्षिप्त प्रदर्शन दिखाता है और इसे हल करने के तरीके के रूप में @JakeGreene वर्णन करता है, साथ ही एक नया भंडार स्थापित करते समय पहली जगह में इससे बचने के दो तरीके।
केविन मार्खम

4
कुछ साल बाद, यह सिर्फ लगता है कि इस सवाल का जवाब बहुत बहुत के समान है यह अन्य
superjos

1
मेरे लिए git pullभी छपा Already up-to-date। पता चला कि मैं शाखा में नहीं था हालांकि मैं था, लेकिन एक अलग हेड शाखा (संभवतः एक असफल मर्ज से?)। दौड़ने के बाद यह स्पष्ट था git branchgit checkout mybranchसब कुछ चलाने के बाद उम्मीद के मुताबिक काम किया।
स्ट्राइड

200

क्या आपने पुश करने से पहले अपना कोड अपडेट किया है?

git pull origin masterकिसी भी चीज को धक्का देने से पहले उपयोग करें ।

मुझे लगता है कि आप originअपने रिमोट के लिए एक नाम के रूप में उपयोग कर रहे हैं ।

पुश करने से पहले आपको अपने स्थानीय रिपॉजिटरी को अप-टू-डेट बनाने से पहले कुछ खींचने की जरूरत है (बस अगर किसी और ने पहले से कोड अपडेट किया है तो github.com)। इससे स्थानीय स्तर पर संघर्षों को हल करने में मदद मिलती है।


1
मैं रिपॉजिटरी नाम कैसे जान सकता हूं? जब मैं टाइप करता हूं तो git pull origin masterशिकायत होती है कि'origin' does not appear to be a git repository
ziyuang

3
'उत्पत्ति' एक दूरस्थ है। आप git remote --verboseअपने git फ़ोल्डर के अंतर्गत सभी रिमोट कॉन्फ़िगर को देखने के लिए उपयोग कर सकते हैं । स्क्रीन पर दिखाई गई जानकारी में या तो "git@github.com" पथ या HTTPS पथ शामिल होंगे, जहाँ से आपको यह पहचानने में सक्षम होना चाहिए कि कहाँ धक्का देना है। उम्मीद है की यह मदद करेगा !
AYK

16
git pull origin masterपहले से ही अप-टू-डेट दिखा रहा है लेकिन तब जब मूल_ब्रंच पर जोर देने की कोशिश की जाती है, तो यह प्रश्न में उल्लिखित एक ही चेतावनी है। कोई उपाय !!
13

2
@ शुभा क्या आपने कभी इस मुद्दे को हल किया? Im एक ही बात हो रही है!
OriginalAlchemist

3
@OriginalAlchemist हां..इसके बाद मैं केवल डेवलपर हूं जो रिमोट-लोकल ब्रांच पर काम कर रहा हूं ... इसलिए मैंने लोकल ब्रांच को फोर्स किया है। और जो लोकल सिस्टम से मेरे बदलाव के साथ सर्वर पर ओपन ब्रांच के सभी बदलावों को ओवरराइड करता है। git push -f <remote> <branch>जैसे git पुश ओरिजिन <your_local_branch> इस थ्रेड को चेक करें ।
CoDe

122

यह आम तौर पर तब होता है जब आप उस शाखा से पहले बदलाव git commitकरने की कोशिश करते हैं जहां किसी और ने पहले से ही बदलाव किए हैं।git pushgit pullingx

सामान्य प्रवाह नीचे के रूप में होगा,

चरण 1 : git stashउस शाखा पर आपके स्थानीय अप्रकाशित परिवर्तन।

कदम 2 : git pull origin branch_name -vकरने के लिए pull and merge(कि शाखा पर स्थानीय रूप से प्रतिबद्ध परिवर्तन करने के लिए । इस मर्ज कुछ संदेश देते हैं, और ठीक संघर्ष यदि कोई हो )

कदम 3 : एड परिवर्तन ( तो फिर तुम popped फाइलों पर करता है तो आप चाहते हैं या पहले से ही धक्का प्रतिबद्ध परिवर्तन (चरण 4) पहले और नए बाद में फ़ाइलों के लिए प्रतिबद्ध बनाने के कर सकते हैं। )git stash popstash

चरण 4 : git push origin branch_name -vमर्ज किए गए परिवर्तन।

( शाखा के लिए) के branch_nameसाथ बदलें ।mastermaster


3
जहां है commit? क्या आपको बाद में अपने बदलाव नहीं करने चाहिए stash pop?
Mehmet

मुझे। मैं आमतौर पर मर्ज किए गए कोड को पहले धकेलता हूं और फिर अपने स्थानीय अनमैक्ड बदलाव करता हूं। आप प्रतिबद्ध कर सकते हैं और एक ही बार में धक्का दे सकते हैं। सिर्फ वरीयता।
प्रयागपाद

51

पहला और सरल समाधान (अनुशंसित नहीं)

  • इस कमांड को आज़माएं git push -f origin master
  • यह आदेश बलपूर्वक दूरस्थ भंडार (GitHub) को अधिलेखित कर देगा

अनुशंसित समाधान

  • ये आदेश चलाएँ:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

यदि यह काम नहीं करता है तो 🔰 के साथ पालन करें

  • .gitफ़ोल्डर से निर्देशिका हटाएं ।
  • फिर इन आदेशों पर अमल करें:

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

या

git push -f origin master 

केवल तभी उपयोग करें git push -f origin masterजब -uआपके लिए काम न करें ।

यह आपकी फ़ाइलों को पुश करते समय होने वाली लगभग किसी भी प्रकार की त्रुटियों को हल करेगा।


4
अपने git रेपो को हटाना और अपने पूरे प्रतिबद्ध इतिहास को खोना "अनुशंसित" समाधान है? जल्दबाजी लगती है।
निल्स गुइलेरमिन

@ नील गिलर्मिन यह आपकी स्थिति पर निर्भर करता है। अगर मैं एक बड़े प्रोजेक्ट पर काम कर रहा हूं, जहां मुझे सभी मर्ज संघर्षों को ठीक करना है तो मैं सभी परिवर्तनों की समीक्षा करने और आसानी से विलय करने के लिए vscode का उपयोग करूंगा। हालांकि आपकी राय के लिए धन्यवाद।
स्मित पटेल

47

कभी-कभी हम पुलिंग को भूल जाते हैं और स्थानीय वातावरण में बहुत सारे काम करते हैं।

अगर कोई बिना खींचे धक्का देना चाहता है,

git push --force

काम कर रहा है। अन्य लोगों के साथ काम करते समय यह अनुशंसित नहीं है, लेकिन जब आपका काम एक साधारण चीज या व्यक्तिगत खिलौना परियोजना है, तो यह एक त्वरित समाधान होगा।


$ गिट धक्का
शौर्य उप्पल

2
इसने मेरे लिए काम किया: 0 अन्य सहयोगियों के साथ व्यक्तिगत परियोजना। मैंने एसओ पर यहां कई अन्य सुझाए गए "समाधान" की कोशिश की थी, जिनमें से कोई भी तय नहीं किया गया था कि एक बहुत ही सरल समस्या क्या थी: मैंने एक स्थानीय reset --hardको एक पुरानी प्रतिबद्ध किया था और फिर कुछ और किया। तब मैं बस चाहता था pushलेकिन रिमोट रेपो मुझे तैयार करने के लिए तैयार नहीं था। WarrenP वास्तव में कम शिक्षाप्रद होने से शिक्षार्थियों की मदद कर सकता है। शायद वह नहीं चाहता।
माईक कृंतक

2
या तो इसका उपयोग न करें, या इसका सही उपयोग करना सीखें। यदि आप किसी टीम द्वारा साझा किए गए एक महत्वपूर्ण केंद्रीय भंडार पर जोर देते हैं, तो आपको सभी महत्वपूर्ण रिपॉजिट के लिए सभी पुश एक्सेस खो देना चाहिए। आप अपने व्यक्तिगत रेपो पर क्या करते हैं, वैकल्पिक तरीकों को सीखने से बचने के लिए, अंततः साझा रेपो पर काम करने की आपकी क्षमता को प्रभावित करेंगे। यदि आप जानते हैं कि बल धक्का से पहले क्या हुआ है, तो कभी-कभी बल धक्का ठीक है। यदि आप नहीं करते हैं, तो यह कभी ठीक नहीं है।
वारेन P

35

आप में से कुछ को यह त्रुटि हो सकती है क्योंकि Git को पता नहीं है कि आप किस शाखा को पुश करने की कोशिश कर रहे हैं।

यदि आपका त्रुटि संदेश भी शामिल है

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

तब आप जिम कूबिसक से आसान युक्तियों का पालन करना चाहते हैं, केवल वर्तमान पुश करने के लिए डिफ़ॉल्ट शाखा सेट करने के लिए, केवल पुश वर्तमान शाखा को कॉन्फ़िगर करें

git config --global push.default current

32
git pull origin branch_name --rebase

यह मेरे लिए काम करता है - कमांड git pull origin branch_name --rebaseपहले तो रिमोट ब्रांच_नाम से बदलाव खींचेगा, फिर उसके rebaseऊपर करंट ब्रांच।


20

उपरोक्त उत्तरों के अलावा, निम्नलिखित ने मेरे लिए काम किया: -

परिदृश्य -

  1. मैंने सफलतापूर्वक पहुंचने के लिए my_branch को धक्का दिया ।
  2. मैंने कुछ और बदलाव किए।
  3. जब मैंने फिर से पुश करने की कोशिश की, (ऐड करने के बाद, कमिट ऑफ कोर्स), तो मुझे उपर्युक्त त्रुटि मिली।

समाधान -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

सबूत


1
आपने मेरी मदद की है। मेरे पास यह नोटिस करने का कठिन समय था कि मुझे दूसरी शाखा को चेकआउट करने और रिमोट से खींचने की आवश्यकता थी, भले ही मैं --allध्वज का उपयोग करके किसी अन्य शाखा पर खींच रहा था ।
MZanetti

18

मुझे भी यही समस्या थी, मैंने जो किया था, उसे सबसे पहले मैंने इसे इस्तेमाल करके बल दिया था

git push --force

मैंने फाइलों को शुरू करने के बाद ऐसा किया था और आपको मिलते ही एक त्रुटि हो रही थी। मैंने सभी फाइलों को किया और इसने उन्हें धक्का दिया। फिर अगली बार मैं गितुब को धक्का दे रहा था। मैंने वही किया जो उसने मुझसे पूछा था और यह तब ठीक था। आशा है कि यह आपके लिए भी काम करता है :)


यह काम करेगा लेकिन यह वह नहीं हो सकता जो आप चाहते हैं! इसका मतलब है कि आप मूल रूप से उन परिवर्तनों की अनदेखी कर रहे हैं जो अब हमेशा के लिए खो जाएंगे।
रोल

3
git push --set-upstream origin master --force
लीजेंड्स

1
रिपॉजिटरी को नष्ट करने का शानदार तरीका। यदि आप जोर जबरदस्ती करते हैं तो आप इतिहास को नष्ट कर देंगे। कई पेशेवर सेटअप git कोड आधार आपको ऐसा करने की अनुमति नहीं देंगे।
ओलिवर डिक्सन

यह एक डुप्लिकेट उत्तर है, और मूल वैसे भी बहुत अच्छी सलाह नहीं थी।
moopet

यह वास्तव में मैं क्या करना चाहता हूँ, लेकिन मैं सिर्फ Gitlab के साथ की कोशिश की, और Gitlab डिजाइन द्वारा "संरक्षित शाखाओं" पर यह अनुमति नहीं देता है
jeffery_the_wind

13

मैंने इसका उल्लेख अपने ट्यूटोरियल, हाउ टू यूज़ गीथहब: ए ट्यूटोरियल फॉर बिगिनर्स में किया है

जब आप GitHub पर एक नया भंडार बनाते हैं, तो GitHub आपसे रीडमी फ़ाइल बनाने के लिए कह सकता है। यदि आप सीधे GitHub पर एक रीडमी फ़ाइल बनाते हैं, तो आपको 'पुश' अनुरोध सफल होने से पहले पहले 'पुल' अनुरोध करना होगा। ये कमांड दूरस्थ रिपॉजिटरी को 'पुल' करेंगे, इसे आपकी वर्तमान फाइलों के साथ मर्ज करेंगे, और फिर सभी फाइलों को 'GitHub' में वापस लाएँगे:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master

मुझे पता है कि यह एक साल बाद है, लेकिन इन सभी उत्तरों में से, आपका एकमात्र ऐसा था जिसने वास्तव में समझाया कि मुझे पहले ही दिन गितुब के साथ परेशानी क्यों हो रही थी। हालांकि पुल और लाने के बीच अंतर क्या है?
Xander Luciano

1
फ़ेच आपको अपने स्थानीय शाखा में विलय किए बिना परिवर्तनों में चारों ओर प्रहार करने की अनुमति देता है। खींचो और फिर मर्ज करने के लिए एक शॉर्टकट है। मुझे यकीन है कि आपने पिछले 13 महीनों में पता लगाया है। मैं सिर्फ इसलिए गुजर रहा हूं क्योंकि मैंने अपनी खुद की एक गड़बड़ बना ली है। ;-)
वुल्फहाउंडजे

6

जब मैंने अपनी वर्तमान शाखा को आगे बढ़ाने का प्रयास किया तो मुझे उपरोक्त त्रुटि संदेश मिल रहा था foobar:

git checkout foobar
git push origin foo

यह पता चला है कि मैं एक ही दूरस्थ शाखा पर नज़र रखने वाली दो स्थानीय शाखाएँ थी:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

इसने मेरे वर्तमान शाखा को धक्का देकर काम किया:

git push origin foobar:foo

... और के साथ सफाई करने के लिए git branch -d


6

git पुश -f मूल शाखा

उपरोक्त आदेश का उपयोग केवल तभी करें जब आप सुनिश्चित हों कि आपको दूरस्थ शाखा कोड की आवश्यकता नहीं है अन्यथा पहले विलय करें और फिर कोड को धक्का दें


5
यह एक बुरे उत्तर की नकल है।
moopet

5

यदि आप अपनी वर्तमान परियोजना में नहीं खींचना चाहते हैं (और संभावित रूप से सामना करने वाले संघर्षों को हल करने की परवाह नहीं करते हैं) और आप एक और शाखा नहीं बनाना चाहते हैं (यह एक और शाखा का प्रबंधन करने के लिए कठिन होगा), और आप डॉन 'कोई भी जोखिम भरा और स्थायी काम करने की forceआज्ञा नहीं चाहता है (जो कि वे जो करते हैं उसे पढ़ने के बाद भी मैं अक्सर ऐसा करने के निहितार्थ के बारे में हैरान होता हूं)।

समाधान : आप बस अपने फ़ोल्डर की सामग्री को किसी अन्य फ़ोल्डर में खींच सकते हैं, परियोजना को अपने अब खाली फ़ोल्डर में खींच सकते हैं, खींची गई सामग्री को कचरे में खींच सकते हैं, फिर अपनी सही परियोजना को फ़ोल्डर में वापस खींच सकते हैं। आपको ठीक से धक्का देने और वांछित परिणाम प्राप्त करने में सक्षम होना चाहिए। यह सचमुच मुझे ऐसा करने में 10 सेकंड से कम समय लगता है।

उन लोगों के लिए जो मुझे बताएंगे कि यह किसी भी परिणाम का हवाला दिए बिना उचित नहीं है, या लोग मुझे एक ऐसी कमांड का उपयोग करने के लिए कह रहे हैं जो मुझे भविष्य की झुंझलाहट का कारण बनता है, मैं कहता हूं: "यह विधि सचमुच मुझे 10 सेकंड से कम समय लेती है।" अगर मैं एक git कमांड का सामना करता हूं, जिसे लागू करने में 10 सेकंड से कम समय लगता है और इसका सटीक प्रभाव है, तो मैं इसे अपनाऊंगा। तब तक, मैं इस पद्धति का उपयोग कर रहा हूं।

इस पद्धति का एक पहलू यह है कि आपका प्रतिबद्ध इतिहास रैखिक दिखाई देगा जब आप वास्तव में विलय किए बिना एक शाखा में विलय कर दिए जाएंगे। समूहों के साथ काम करते समय यह सबसे अच्छी विधि नहीं हो सकती है। उन मामलों में शाखाओं पर काम करें!


4

बस एक ही मुद्दा था, लेकिन मेरे मामले में मैंने रिमोट पर गलत शाखा टाइप की थी। तो, ऐसा लगता है कि इस मुद्दे का एक और स्रोत है ... दोहरी जांच आप सही शाखा पर जोर दे रहे हैं।


1
और मेरे पास एक समान बात थी, जहां मैंने पिछली कमांड को याद किया था, जो पूरी तरह से अलग रिपॉजिटरी के लिए था!
क्लेयर मैक्रै

4

मैंने एक ही समस्या का अनुभव किया और यह निकला कि मैं एक अलग (स्थानीय) शाखा पर था जितना मैंने सोचा था कि और सही स्थानीय शाखा रिमोट से कमिट्स में पीछे थी।

मेरा समाधान: सही शाखा की जांच करें, अन्य स्थानीय शाखा से कमिटमेंट लें, गिट पुल और गिट पुश


4

मेरे पास एक समान मुद्दा था और यह पता चला कि मेरी शाखा को अद्यतित रखने के लिए मेरे वर्कफ़्लो में गलती थी। मैं निम्नलिखित कर रहा था:

मेरे स्थानीय 'मास्टर' में

git fetch upstream
git merge upstream/master --ff-only

फिर वापस मेरी स्थानीय शाखा में

git rebase master

इसने पिछले गिट प्रवाह के लिए अच्छी तरह से काम किया लेकिन जीथब के साथ नहीं। git rebaseसिंक कर रहा है के साथ मुद्दों के कारण समस्या यहाँ था (और मुझे लगता है कि कुछ मैं पूरी तरह से समझे बिना स्वीकार करने के लिए मिला है है स्वीकार करेंगे) और दुर्भाग्य से मुझे एक स्थान जहाँ में डाल git push -fशायद सबसे आसान विकल्प बन गया। अच्छा नही।

मेरा नया प्रवाह शाखा को सीधे अपडेट करने के लिए git mergeनिम्नानुसार है:

मेरी स्थानीय शाखा में

git fetch upstream
git merge upstream/master

तेजी से आगे नहीं, क्योंकि मैंने स्थानीय शाखा में पाठ्यक्रम में बदलाव किया है।

जैसा कि आप शायद बता सकते हैं, मैं कोई विशेषज्ञ नहीं हूं, लेकिन मुझे विश्वास है कि यह वर्कफ़्लो संभवतः उन विशिष्ट समस्याओं से बचना होगा जो मेरे पास थीं।


3

मेरे मामले में, मुझे "माइब्रंच" चेक आउट किया था, और किया था git pull, इसलिए मैं यह पता नहीं लगा सका कि पुश काम क्यों नहीं कर रहा था। आखिरकार, मुझे एहसास हुआ कि मैं गलत शाखा को आगे बढ़ा रहा हूं। मैं git push origin masterइसके बजाय टाइप कर रहा था git push origin mybranch

इसलिए यदि आप पहले ही कर चुके हैं git pullऔर अभी भी यह संदेश प्राप्त कर रहे हैं, तो सुनिश्चित करें कि आप सही शाखा को आगे बढ़ा रहे हैं।


3

क्या आपकी शाखा का नाम दूरस्थ शाखा के नाम के समान है?

यदि नहीं, तो आपको दूरस्थ शाखा के समान नाम वाली एक नई शाखा की जांच करनी चाहिए और इसे फिर से आगे बढ़ाने का प्रयास करना चाहिए।

उस दूरस्थ शाखा को मान लें जिसे आप पुश करना चाहते हैं [ परीक्षण ] और आपकी स्थानीय शाखा को [ परीक्षण ] नाम दिया गया है ।

यदि आप परीक्षण शाखा में नहीं हैं , तो पहले उस पर जाएँ।

git checkout test

फिर एक नई शाखा खोलें और इसे परीक्षण का नाम दें ।

git checkout -b testing

अब, इसे धकेलने का समय है:

git push [remote repo] testing

2
बस $git branch -M <new_name>स्थानीय शाखा का नाम बदलने के लिए उपयोग करें।
coms

3

मैंने अपनी जीआईटी रिपॉजिटरी में इस मुद्दे को हल किया है। कोई ज़रूरत नहीं करने के लिए rebaseया forceइस मामले में करते हैं। इसे हल करने के लिए नीचे दिए गए चरणों का उपयोग करें -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

आशा है कि यह मदद करेगा।


2

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


2

मैं एक समान त्रुटि प्राप्त कर रहा था जबकि नवीनतम परिवर्तनों को एक नंगे गिट रिपॉजिटरी में धकेल दिया गया था जिसका उपयोग मैं gitweb के लिए करता हूं । मेरे मामले में मैंने नंगे भंडार में कोई बदलाव नहीं किया, इसलिए मैंने बस अपने नंगे भंडार को हटा दिया और फिर से क्लोन किया:

git clone --bare <source repo path> <target bare repo path>

2

यदि आप निश्चित हैं कि किसी ने आपके गिट रिपॉजिटरी में कोई बदलाव नहीं किया है और आप नवीनतम संस्करण पर काम कर रहे हैं, git pullतो यह आपके दिल में समाधान के रूप में समझ में नहीं आता है ...

फिर शायद यही हुआ, आपने उपयोग किया git commit --amend

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

एटलसियन ट्यूटोरियल: इतिहास का पुनर्लेखन

हालांकि, यह प्रदर्शन करने की अनुशंसा नहीं की जाती है git commit --amend यदि आपने पहले से ही GitHub को प्रतिबद्ध किया है , तो इसका कारण यह है कि "संशोधन केवल सबसे हालिया प्रतिबद्ध को बदल नहीं देता है - यह इसे पूरी तरह से बदल देता है। Git के लिए, यह एक ब्रांड नई प्रतिबद्ध की तरह दिखेगा" जिसका अर्थ आपके GitHub के अन्य डेवलपर से है, इतिहास A-> B-> C की तरह दिखता है, लेकिन आप के लिए यह A-> B-> D की तरह दिखता है, यदि GitHub आपको बताए, तो pushबाकी सभी को मैन्युअल रूप से अपना इतिहास ठीक करना होगा

यही कारण है कि आपको त्रुटि संदेश मिलता है ! [rejected] master -> master (non-fast-forward), यदि आप जानते हैं कि किसी ने आपके नवीनतम परिवर्तन को नहीं खींचा है, तो आप कर सकते हैं git push --force, यह आपके सार्वजनिक रेपो में परिवर्तन के इतिहास को बदल देगा । अन्यथा ... आप प्रदर्शन कर सकते हैं git pull, लेकिन मेरा मानना ​​है कि यह उसी तरह का परिणाम होगा जैसा कि आप के माध्यम से नहीं गए थे git commit --amend, यह एक नई प्रतिबद्धता पैदा करेगा (यानी: गिट पुल के बाद गिट इतिहास: ए-> बी-> सी-> डी )

अधिक विवरण के लिए: अपनी नवीनतम प्रतिबद्धताओं को कैसे बदलें


2

एक अन्य विकल्प: स्थानीय रूप से अपनी शाखा का नाम बदलकर कुछ नया करें।

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

आप दूरस्थ शाखा को एक स्थानीय प्रतिलिपि प्राप्त कर सकते हैं और (i) दूरस्थ के पास (पुरानी शाखा के नाम के साथ) और (ii) आपके पास क्या है (नए शाखा नाम के साथ) के बीच के अंतरों की जांच कर सकते हैं, और यह तय कर सकते हैं कि क्या करना है । चूँकि आपको पहली बार रिमोट के अंतर के बारे में पता नहीं था (इसलिए समस्या है), बस विलय या जबरन बदलाव कहीं बहुत क्रूर है।

अंतर देखें, जिस ब्रांच पर आप काम करना चाहते हैं, उसे उठाएं, चेरी आप दूसरे ब्रांच से जो बदलाव चाहते हैं, या जो बदलाव आपको मिले हैं, उस ब्रांच में वापस न करें।

तब आपको यह तय करने की स्थिति में होना चाहिए कि क्या आप अपने स्वच्छ संस्करण को रिमोट पर मजबूर करना चाहते हैं, या नए परिवर्तन, या जो भी जोड़ें।


1

पुश कमांड के साथ समस्या यह है कि आप अपने स्थानीय और दूरस्थ रिपॉजिटरी से मेल नहीं खाते हैं। यदि आप गिट हब से नया रिपॉजिटरी बनाते समय डिफ़ॉल्ट रूप से रीडमी को इनिशियलाइज़ करते हैं, तो, मास्टर ब्रांच अपने आप बन जाता है। हालाँकि, जब आप पुश करने की कोशिश करते हैं जिसकी कोई शाखा नहीं होती है। आप धक्का नहीं दे सकते ... इसलिए, सबसे अच्छा अभ्यास यह है कि बिना डिफ़ॉल्ट रीडमी इनिशियलाइज़ेशन के रेपो बनाएं।


1

यह समस्या आमतौर पर readme.md फ़ाइल बनाने के कारण होती है, जिसे एक कमिट के रूप में गिना जाता है, सिस्टम पर स्थानीय रूप से सिंक्रनाइज़ नहीं है, और सिर के पीछे की कमी है, इसलिए, यह एक गिट पुल अनुरोध को दर्शाता है। आप रीडमी फ़ाइल से बचने की कोशिश कर सकते हैं और फिर कमिट करने की कोशिश कर सकते हैं। इसने मेरे मामले में काम किया।


0

इस समस्या का एक और कारण (स्पष्ट रूप से इतना आम नहीं) ...

जब मैंने एक धक्का दिया तो मेरा सर्वर ~ 12 घंटे के पीछे था

मैंने NTP पर सर्वर SYNC मेरी घड़ी को कॉन्फ़िगर किया।

मैंने एक नया git पुश निष्पादित किया, जिसके कारण इस पोस्ट में चर्चा की गई त्रुटि हुई।


0

यदि किसी संयोग से git pullप्रिंट होता है Already up-to-dateतो आप वैश्विक git push.defaultparam (In ~/.gitconfig) की जांच करना चाहते हैं । simpleअगर यह अंदर था तो इसे सेट करें matching। नीचे उत्तर बताते हैं कि क्यों:

Git - पुश.फॉल्ट "मिलान" और "सरल" में क्या अंतर है

इसके अलावा, यह जाँचने योग्य है कि क्या आपकी स्थानीय शाखा उपयोग करने की तारीख से बाहर है git remote show originऔर यदि आवश्यक हो तो एक पुल करें


0

इसका उपयोग git pull https://github.com/username/repository यह है क्योंकि Github और दूरस्थ रिपॉजिटरी सिंक में नहीं हैं। यदि आप pullरेपो और फिर Pushसब कुछ सिंक में होंगे और त्रुटि दूर हो जाएगी।

`


0

git pull प्रिंट पहले से ही up-to-date

समाधान:

आपको दूरस्थ (सर्वर) में एक रिपॉजिटरी / प्रोजेक्ट बनाया जा सकता है और वहां कुछ फ़ाइल जोड़ी जा सकती है, फिर अपने स्थानीय और आरंभिक गिट में एक फ़ोल्डर बनाया git init- यह गलती है , आपको git initस्थानीय में नहीं बनाना चाहिए , बजाय अपने स्थानीय को प्रोजेक्ट क्लोन करना का उपयोग करते हुएgit clone

फिर खींचो

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