दिलचस्प पोस्ट
"प्लेसमेंट न्यू" के लिए क्या उपयोग किया जाता है? जावास्क्रिप्ट में घटना की पूर्वता क्या है? उद्धरण चिह्नों के साथ उद्धृत स्ट्रिंग के लिए रेगेक्स Android PowerManager.goToSleep (n) को डिवाइस को नींद मोड में कॉल करने के लिए किस अनुमति की आवश्यकता है? पायथन में किसी शब्दकोश में एक मनमानी तत्व तक पहुंचें sizeof ऑपरेटर के साथ समस्या क्या गेटर्स और सेटर्स खराब डिज़ाइन हैं? विरोधाभासी सलाह एक्सएएमएल सशर्त संकलन उद्देश्य-सी में लंबे समय से मतदान कैसे JSON कुंजी का नाम बदलने के लिए मैं php में एक यूनिक्स टाइमस्टैम्प में 24 घंटे कैसे जोड़ूं? डिफ़ॉल्ट रूप HTTP विधि क्या है? विज़ुअल स्टूडियो के अंदर से एक प्रोजेक्ट फ़ोल्डर का नाम कैसे बदलें? गतिविधि में सभी पाठ दृश्यों के लिए फ़ॉन्ट सेट करें? मोंगोडीबी: एकत्रीकरण ढांचे: अंतिम तिथि वाले दस्तावेज प्रति समूह आईडी प्राप्त करें

रिमोट जीआईटी रिपॉजिटरी में किए गए संशोधन को मैं कैसे संशोधित कर सकता हूं?

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

> git commit --amend 

दुर्भाग्य से, कमांड को वापस रिपॉजिटरी में नहीं भेजा जा सकता है। इसे इस तरह अस्वीकार कर दिया गया है:

 > git push origin To //my.remote.repo.com/stuff.git/ ! [rejected] master -> master (non-fast forward) error: failed to push some refs to '//my.remote.repo.com/stuff.git/' 

मुझे क्या करना चाहिए? (मैं दूरस्थ रिपॉजिटरी तक पहुंच सकता हूं।)

Solutions Collecting From Web of "रिमोट जीआईटी रिपॉजिटरी में किए गए संशोधन को मैं कैसे संशोधित कर सकता हूं?"

मैं वास्तव में एक बार --force और .git रिपॉजिटरी के साथ धक्का दिया और लिनुस बिग टाइम द्वारा डांट गया। सामान्य तौर पर यह अन्य लोगों के लिए कई समस्याएं पैदा करेगा। एक सरल जवाब "यह मत करो" है

मैं देख रहा हूं कि दूसरों ने वैसे भी ऐसा करने के लिए नुस्खा दिया है, इसलिए मैं उन्हें यहाँ दोहराना नहीं दूंगा। लेकिन यहां आपके द्वारा संशोधित प्रतिबद्धता को बलपूर्वक हटा दिया गया है – स्थिति (या + मास्टर)

  1. पुरानी प्रतिबद्धता ढूंढें जो आपने संशोधित किया था (इसे बुलाओ, और हम नए को संशोधित करने के द्वारा बनाई गई नई प्रतिबद्धता को कॉल करेंगे)।
  2. old और new बीच एक मर्ज बनाना, new वृक्ष रिकॉर्ड करना, जैसे कि git checkout new && git merge -s ours old
  3. अपने मास्टर को git merge master साथ git merge master
  4. git push . HEAD:master साथ परिणाम के साथ अपने मास्टर को अपडेट करें git push . HEAD:master
  5. परिणाम को पुश करें

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

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

अगर ऐसा नहीं था, तो दो लोग एक ही समय में एक ही रिपॉजिटरी में धकेलने से नहीं जानते थे कि एक ही समय में एक नई प्रतिबद्धता आ रही है और जिसने पिछली बार धकेल दिया, वह पिछले पुशर का काम खोएगा। उन्हें यह महसूस करना

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

 git push -f origin master 

यहां तक ​​कि यह काम नहीं कर सकता क्योंकि गिट ने रिमोट रिपॉजिटरी को अनफिस्टरवर्ड पॉश से मना कर दिया है ताकि विन्यास चर प्राप्त हो। अगर ऐसा मामला है तो अस्वीकृति का कारण ऐसा दिखेगा (नोट 'रिमोट अस्वीकृत' हिस्सा):

  ! [remote rejected] master -> master (non-fast forward) 

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

 git push origin :master git push origin master 

सामान्यतया git push करने के लिए अंतिम पैरामीटर को प्रारूप <local_ref>:<remote_ref> का उपयोग करता है, जहां local_ref स्थानीय रिपॉजिटरी पर शाखा का नाम होता है और remote_ref को रिमोट रिपॉजिटरी पर शाखा का नाम remote_ref जाता है। यह कमांड जोड़ी दो शॉर्टहैंड का उपयोग करता है। :master की एक रिक्त स्थानीय_आफ है जिसका मतलब है कि दूरस्थ शाखा master को एक रिक्त शाखा धक्का, यानी दूरस्थ शाखा को हटा दें। नंबर के साथ एक शाखा का नाम : इसका मतलब है कि स्थानीय शाखा को उसी नाम से दूरदराज के शाखा में दिए गए नाम से पुश करें। इस स्थिति में master:master लिए कम है master:master

त्वरित शेख़ी: तथ्य यह है कि कोई भी यहां सरल उत्तर नहीं पोस्ट कर रहा है, यह गिट सीएलआई द्वारा प्रदर्शित निराशाजनक उपयोगकर्ता-शत्रुता को दर्शाता है।

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

एक बार जब आप किसी भी टकराव का समाधान कर लेते हैं, तो आप फिर से पुश कर सकते हैं।

इसलिए:

 git pull 

अगर आपको पुल में त्रुटियां मिलती हैं, तो शायद आपके स्थानीय रिपॉजिटरी कॉन्फ़िगरेशन में कुछ गलत है (मुझे .git / config शाखा अनुभाग में गलत रेफरी है)।

और बाद में

 git push 

हो सकता है कि आपको एक "तुच्छ मर्ज" के बारे में बताए विषय के साथ एक अतिरिक्त प्रतिबद्धता मिलेगी।

संक्षेप उत्तर: किसी सार्वजनिक रिपो को संशोधित किए गए कमानों को न लगाएं।

लंबी उत्तर: कुछ git commit --amend आदेश, जैसे git commit --amend और git rebase , वास्तव में इतिहास ग्राफ को फिर से लिखना यह तब तक ठीक है जब तक आप अपने परिवर्तन प्रकाशित नहीं करते हैं, लेकिन एक बार आप ऐसा करते हैं, तो आपको वास्तव में इतिहास के साथ घूमना नहीं चाहिए, क्योंकि अगर किसी व्यक्ति को पहले से ही आपका परिवर्तन मिल गया है, तब जब वह फिर से खींचने की कोशिश करता है, तो वह विफल हो सकता है । एक प्रतिबद्धता में संशोधन करने के बजाय, आपको बस परिवर्तनों के साथ एक नया प्रतिबद्ध करना चाहिए।

हालांकि, यदि आप वास्तव में एक संशोधित प्रतिबद्धता को पुश करना चाहते हैं, तो आप ऐसा कर सकते हैं:

 $ git push origin +master:master 

अग्रगण्य + हस्ताक्षर धक्का करने के लिए बाध्य होगा, भले ही इसका परिणाम "फास्ट फॉरवर्ड" कमिट में न हो। (एक तेज़ फॉरवर्ड कमिट तब होती है जब आप जो बदलाव कर रहे हैं वह सार्वजनिक रिपो में पहले से ही परिवर्तनों के प्रत्यक्ष वंशज हैं।)

आपके द्वारा पहले ही एक commit --amend बाद अपने परिवर्तनों को आगे बढ़ाने के लिए यहां एक बहुत ही सरल और साफ तरीका है: –

 git reset --soft HEAD^ git stash git push -f origin master git stash pop git commit -a git push origin master 

जो निम्नलिखित करता है:

  • माता पिता की प्रतिबद्धता के लिए शाखा प्रमुख को रीसेट करें।
  • इस अंतिम प्रतिबद्ध Stash
  • दूरदराज के लिए मजबूर करें रिमोट अब अंतिम प्रतिबद्ध नहीं है।
  • अपने छिपाने की जगह पॉप
  • स्वच्छ रूप से प्रस्तुत करें
  • रिमोट के लिए पुश करें

अगर इसे एक अलग शाखा या रिमोट में लागू करते हैं तो "मूल" और "मास्टर" को बदलने के लिए याद रखें

मैंने इसे अपने स्थानीय संशोधित प्रतिबद्धता को छोड़कर और शीर्ष पर नए परिवर्तन जोड़कर हल किया है:

 # Rewind to commit before conflicting git reset --soft HEAD~1 # Pull the remote version git pull # Add the new commit on top git add ... git commit git push 

मुझे भी यही समस्या थी।

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

एक गीट-नौसिखिया के रूप में, मैंने सोचा कि यह पूर्ण FUBAR था।

समाधान: कुछ सुझाव दिए गए हैं जैसे @बार ने स्थानीय बैकअप शाखा को बनाया

 # Rewind to commit just before the pushed-and-amended one. # Replace <hash> with the needed hash. # --soft means: leave all the changes there, so nothing is lost. git reset --soft <hash> # Create new branch, just for a backup, still having all changes in it. # The branch was feature/1234, new one - feature/1234-gone-bad git checkout -b feature/1234-gone-bad # Commit all the changes (all the mess) not to lose it & not to carry around git commit -a -m "feature/1234 backup" # Switch back to the original branch git checkout feature/1234 # Pull the from remote (named 'origin'), thus 'repairing' our main problem git pull origin/feature/1234 # Now you have a clean-and-non-diverged branch and a backup of the local changes. # Check the needed files from the backup branch git checkout feature/1234-gone-bad -- the/path/to/file.php 

हो सकता है कि यह एक तेज़ और साफ समाधान नहीं है, और मैंने अपना इतिहास खो दिया (1 के बजाय 1 कमिट), लेकिन यह एक दिन का काम बचाया।

अगर आपको पता है कि कोई भी आपके गैर-संशोधित प्रतिबद्धता को खींचा गया है, तो git push --force-with-lease विकल्प का उपयोग करें।

TortoiseGit में, आप "पुश …" विकल्प "फोर्स: मई डिस्बार्ड" के तहत एक ही चीज़ कर सकते हैं और "ज्ञात परिवर्तन" की जांच कर सकते हैं।

फोर्स (ज्ञात परिवर्तनों को छोड़ दें) दूरस्थ रिपाईटरी को सुरक्षित गैर-फास्ट फॉरवर्ड पुश को स्वीकार करने की अनुमति देता है इसके कारण रिमोट रिपोजिटरी कमिट खो सकती है; देखभाल के साथ इसका इस्तेमाल करें यह रिमोट पर अन्य लोगों से अज्ञात परिवर्तनों को खोने से रोका जा सकता है यह जांचता है कि क्या सर्वर शाखा दूरस्थ-ट्रैकिंग शाखा (ज्ञात परिवर्तनों) के समान प्रतिबद्धता को इंगित करता है। यदि हां, तो एक बल पुश किया जाएगा। अन्यथा यह अस्वीकार कर दिया जाएगा। चूंकि git में दूरस्थ-ट्रैकिंग टैग नहीं हैं, इस विकल्प का उपयोग करके टैग को ओवरराइट नहीं किया जा सकता है।

आपके द्वारा पहले से ही एक git add "your files" और git commit --amend git add "your files" हुए आपके परिवर्तनों को आगे बढ़ाने के लिए यहां एक बहुत सरल और साफ तरीका है:

 git push origin master -f 

या:

 git push origin master --force 

यदि आपने कोड को अपने दूरस्थ शाखा (GitHub / Bitbucket) में धक्का नहीं दिया है, तो कमांड लाइन पर कमिट लाइन पर कमिट संदेश बदल सकते हैं।

  git commit --amend -m "Your new message" 

यदि आप किसी विशिष्ट शाखा पर काम कर रहे हैं, तो यह करें:

 git commit --amend -m "BRANCH-NAME: new message" 

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

कृपया यह करने से पहले पूरा उत्तर पढ़ें

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

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

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

प्रतिबद्ध संदेश बदलते समय यह सबसे अच्छा अभ्यास होता है, अगर यह पहले ही धकेल दिया गया था।

मुझे रिमोट रेपो से खींचकर इस समस्या को ठीक करना पड़ा और मर्ज टकराव के साथ सौदा किया गया, प्रतिबद्ध और फिर धक्का। लेकिन मुझे लगता है कि बेहतर तरीका है।

आपको यह त्रुटि मिल रही है क्योंकि गिट रिमोट पहले से ही इन कमिट फाइलों में है आपको इसके लिए शाखा को पुश करने के लिए मजबूर करना होगा:

 git push -f origin branch_name 

यह भी सुनिश्चित करें कि आप दूरस्थ से कोड खींच लें क्योंकि आपकी टीम पर किसी अन्य व्यक्ति ने एक ही शाखा को धक्का दिया हो।

 git pull origin branch_name 

यह उन मामलों में से एक है जहां हमें दूरदराज के लिए प्रतिबद्धता को मजबूर करना पड़ता है।

मैंने सिर्फ जीट को क्या कर रखा है जो मुझे करने के लिए कहा था। इसलिए:

  • संशोधित प्रतिबद्धता की वजह से पुश नहीं किया जा सकता
  • मैं सुझाव के रूप में पुल करता हूं
  • मर्ज विफल रहता है इसलिए मैं मैन्युअल रूप से इसे ठीक करता हूं
  • एक नया प्रतिबद्ध बनाएं (लेबल "मर्ज") और उसे दबाएं।
  • यह काम करने लगता है!

नोट: संशोधित प्रतिबद्धता नवीनतम था