मैं git में मूल / मास्टर का स्थान कैसे पा सकता हूं और मैं इसे कैसे बदल सकता हूं?


227

मैं एक नौसिखिया हूँ। मैं हाल ही में तोड़फोड़ से गिट के लिए एक रेल परियोजना ले जाया गया। मैंने यहाँ ट्यूटोरियल का अनुसरण किया: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

मैं अपने कोड को स्टोर करने के लिए unfuddle.com का उपयोग कर रहा हूं। मैं अपने मैक लैपटॉप पर ट्रेन में / से काम करने के लिए बदलाव करता हूं और फिर उन्हें अनफॉलो करने के लिए धक्का देता हूं जब मेरे पास निम्नलिखित कनेक्शन का उपयोग करके नेटवर्क कनेक्शन होता है:

git push unfuddle master

मैं तैनाती के लिए कैपिस्ट्रानो का उपयोग करता हूं और मास्टर शाखा का उपयोग करके अनफिट रिपॉजिटरी से कोड खींचता हूं।

हाल ही में मैंने अपने लैपटॉप पर "गिट स्थिति" चलाने पर निम्नलिखित संदेश देखा है:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

और मैं उलझन में हूं कि क्यों। मुझे लगा कि मेरा लैपटॉप मूल था ... लेकिन यह नहीं पता कि या तो यह तथ्य कि मैं मूल रूप से तोड़फोड़ से उकसाया गया या अनफूल्ड को धक्का दे रहा हूं, जो संदेश को दिखाने का कारण है। मैं कैसे कर सकता हूँ:

  1. पता करें कि Git को 'मूल / मास्टर' कहां लगता है?
  2. अगर यह कहीं और है, तो मैं अपने लैपटॉप को 'मूल / मास्टर' में कैसे बदलूं?
  3. इस संदेश को दूर जाने के लिए प्राप्त करें। इससे मुझे लगता है कि Git किसी बात से नाखुश है।

मेरा मैक Git संस्करण 1.6.0.1 चल रहा है।


जब मैं git remote show origindbr द्वारा सुझाए गए अनुसार चलता हूं, तो मुझे निम्नलिखित मिलते हैं:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

जब मैं git remote -vअरस्तू पगलतज़िस द्वारा सुझाए गए अनुसार दौड़ता हूं, तो मुझे निम्नलिखित मिलते हैं:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

अब, दिलचस्प geekforबात यह है कि मैं निर्देशिका में अपने प्रोजेक्ट पर काम कर रहा हूं, लेकिन यह कहता है कि मेरी उत्पत्ति gfनिर्देशिका में मेरी स्थानीय मशीन है । मेरा मानना ​​है कि gfमैंने अपनी परियोजना को तोड़फोड़ से गिट में परिवर्तित करते समय अस्थायी निर्देशिका का उपयोग किया था और शायद जहां से मैंने अनफ़ाल्ट करने के लिए धक्का दिया था। फिर मुझे विश्वास है कि मैंने अनफ्रीगल से डायरेक्ट्री के लिए एक नई कॉपी चेक की geekfor

तो ऐसा लगता है कि मुझे dbr की सलाह का पालन करना चाहिए और करना चाहिए:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git

जवाबों:


202

1. पता करें कि Git को कहां लगता है कि 'मूल / मास्टर' का उपयोग किया जा रहा है git-remote

git remote show origin

।।जैसे कुछ लौटेगा ।।

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

एक रिमोट मूल रूप से रिमोट रिपॉजिटरी की एक कड़ी है। जब तुम करोगे..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..गीता आपके द्वारा जोड़े गए पते में परिवर्तन को धक्का देगा। यह रिमोट रिपॉजिटरी के लिए एक बुकमार्क की तरह है।

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

2. अगर यह कहीं और है, तो मैं अपने लैपटॉप को 'मूल / मास्टर' में कैसे बदलूं?

ऐसा करने का कोई मतलब नहीं है। "लैपटॉप" का नाम "मूल" रखा गया है - आप git push laptopअपने लैपटॉप से कभी नहीं करना चाहते हैं ।

यदि आप मूल रिमोट को निकालना चाहते हैं, तो आप करते हैं।

git remote rm origin

यह (फ़ाइल-सामग्री / संशोधन-इतिहास के संदर्भ में) कुछ भी नष्ट नहीं करेगा। यह "आपकी शाखा आगे है .." संदेश को रोक देगा, क्योंकि यह अब रिमोट के साथ आपके भंडार की तुलना नहीं करेगा (क्योंकि चला गया है!)

एक बात याद रखें कि इसके बारे में कुछ विशेष नहीं है origin, यह सिर्फ एक डिफ़ॉल्ट नाम git का उपयोग करता है।

Git का उपयोग originडिफ़ॉल्ट रूप से तब होता है जब आप चीजों को पसंद करते हैं git pushया git pull। इसलिए, यदि आपके पास एक रिमोट है जो आप बहुत उपयोग करते हैं (अनफिल्ड, आपके मामले में), तो मैं "मूल" के रूप में अनफ़ल जोड़ने की सलाह दूंगा: "

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

या सेट-url का उपयोग करके ऊपर एक आदेश में करें:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

तब आप इसके बजाय बस कर सकते हैं git pushया git pullअपडेट कर सकते हैंgit push unfuddle master


1
वह लिखता है कि वह originरिपॉजिटरी को धक्का देता है (भले ही वह इस बात से अवगत नहीं है कि यह कैसे काम करता है) - रिमोट को हटाना उसके लिए शायद ही कोई उपयोगी चीज होगी।
अरस्तू पगलतज़िस

10
मुझे समझ नहीं आता कि लोग सवाल क्यों उठाते हैं। यह प्रश्न का अर्थ बदल देता है, यह मौजूदा उत्तरों को कोई मतलब नहीं देता है, और यह अन्य लोगों को यह बताने नहीं देता है कि प्रश्न पूछने वाले को इस तथ्य के आधार पर अधिक जानकारी की आवश्यकता है कि उनका प्रश्न थोड़ा 'गलत' हो सकता है।
स्टू

9
दूरस्थ मूल को हटाना वास्तव में मुझे क्या चाहिए था क्योंकि यह एक स्थानीय भंडार की ओर इशारा कर रहा था जो अब अस्तित्व में नहीं था, न कि अनैतिक भंडार।
ब्रायन केली

3
stu: रिकॉर्डिंग एक अच्छी बात है! यदि वे शब्द स्पष्ट रूप से पहली जगह पर नहीं थे, तो जवाब पाने में कोई मतलब नहीं है कि वास्तविक समस्या का समाधान नहीं है।
dbr

4
लेकिन गुस्सा करना और कड़वा होना इतना आसान है। :-) लेकिन मैं आपकी बात देखता हूँ।
स्टू

286

मैं इस सवाल के बारे में स्पष्टीकरण के लिए आया था कि "आपकी शाखा आगे क्या है ..." संदेश का अर्थ है, सामान्य योजना में। यहां इसका कोई जवाब नहीं था, लेकिन चूंकि यह प्रश्न वर्तमान में Google के शीर्ष पर दिखाई देता है जब आप "आपकी शाखा" मूल / मास्टर से आगे "वाक्यांश के लिए खोज करते हैं, और मैंने तब से पता लगाया है कि संदेश का वास्तव में क्या मतलब है , मुझे लगा कि मैं यहाँ जानकारी पोस्ट करूँगा।

इसलिए, एक नौसिखिया होने के नाते, मैं देख सकता हूं कि मुझे जो उत्तर चाहिए वह एक अलग नौसिखिया जवाब था। विशेष रूप से, "आपकी शाखा किसके द्वारा आगे है ..." वाक्यांश का अर्थ है कि आपके द्वारा स्थानीय रिपॉजिटरी में आपके द्वारा जोड़ी गई फाइलें और प्रतिबद्ध हैं, लेकिन कभी भी मूल को धक्का नहीं दिया है। इस संदेश के इरादे को इस तथ्य से और अधिक बाधित किया जाता है कि "गिट डिफरेंस", कम से कम मेरे लिए, कोई अंतर नहीं दिखा। यह तब तक नहीं था जब तक मैं "git diff Origin / master" नहीं चला था कि मुझे बताया गया था कि मेरे स्थानीय रिपॉजिटरी और रिमोट मास्टर के बीच मतभेद थे।

तो, स्पष्ट होने के लिए:


"आपकी शाखा आगे है ..." => आपको दूरस्थ मास्टर को धकेलने की आवश्यकता है। अपने स्थानीय भंडार और दूरस्थ मास्टर भंडार के बीच क्या अंतर हैं, यह देखने के लिए "git diff मूल / मास्टर" चलाएँ ।


आशा है कि यह अन्य newbies में मदद करता है।

(इसके अलावा, मैं मानता हूं कि कॉन्फ़िगरेशन सूक्ष्मताएं हैं जो इस समाधान को आंशिक रूप से अमान्य कर सकती हैं, जैसे कि तथ्य यह है कि मास्टर वास्तव में "रिमोट" नहीं हो सकता है, और यह कि "मूल" एक पुन: प्राप्य नाम है, जिसका उपयोग सम्मेलन द्वारा किया जाता है, आदि) उस तरह की परवाह न करें। हम सरल, सरल उत्तर चाहते हैं। हम बाद में सूक्ष्मताओं के बारे में पढ़ सकते हैं, एक बार जब हम दबाव की समस्या हल कर लेते हैं।)

राजा


2
@Earl git diff --cached origin/masterयहां बेहतर निर्देश नहीं होगा क्योंकि यह बताता है कि अगले पुश का परिणाम क्या होगा? आपके द्वारा ऊपर हाइलाइट की गई कमांड भी अनकम्फ़र्ड और अनस्टेजेड फ़ाइलों को दिखाती है (मुझे लगता है, मैं एक गिट नौसिखिया भी हूँ)
nhed

48
यह भी संभव है कि git fetchअगर आपको यह त्रुटि मिल रही है तो आपको चलाने की आवश्यकता है git pull remote branch। आपके रेफ्स पुराने हो सकते हैं। git fetchठीक करता है।
ब्रायन केनेडी

करता origin/masterहिस्सा मतलब masterमें शाखा originरेपो?
रकीब

1
ध्यान दें कि यह विवरण अपूर्ण है। मैं वर्तमान में अनुभव कर रहा हूं, # On branch master # Your branch is ahead of 'origin/master' by 3 commits. लेकिन git diff मूल / मास्टर कुछ नहीं दिखाता है, और - - कैश किया गया विकल्प इसे नहीं बदलता है)। और, git fetch इसमें बदलाव नहीं करता है, git pull इसे नहीं बदलता है, git reset --hard इसे नहीं बदलता है। इसे बदलने के लिए, मुझे जरूरत थी: git reset --hard origin / master और मैं उस मार्ग को चुनता हूं क्योंकि अन्य लोग मेरे साथ इस रिपॉजिटरी में काम कर रहे हैं और मैं उनके परीक्षण को अमान्य नहीं करना चाहता था, और क्योंकि मुझे पता नहीं चला कि ये क्या करते हैं कर रहे हैं।
rdm

1
मुझे यह संदेश भी मिलता है जब मुझे मूल / गुरु के लिए धक्का देने के बजाय खींचने की आवश्यकता होती है । उदाहरण के लिए अगर मुझे git checkout masterसंदेश मिलता है तो मुझे दूसरी शाखा से , जो git pull origin masterकाम करने से पहले चाहिए । लेकिन मुझे यह बहुत भ्रामक लगता है क्योंकि संदेश का शब्द इसके विपरीत बताता है
एंथ्रोपिक

38

मुझे एक समस्या थी जो इस तरह से थी जहां मेरी कार्यशील निर्देशिका थी, ahead of origin by X commitsलेकिन इसके git pullपरिणामस्वरूप थी Everything up-to-date। मैंने इस सलाह का पालन करते हुए इसे ठीक करने का प्रबंधन किया । मैं इसे यहाँ पोस्ट कर रहा हूँ अगर यह किसी और को भी इसी तरह की समस्या में मदद करता है।

मूल निर्धारण इस प्रकार है:

$ git push {remote} {localbranch}:{remotebranch}

जहाँ कोष्ठक में शब्दों को आपके दूरस्थ नाम, आपके स्थानीय शाखा नाम और आपके दूरस्थ शाखा नाम से प्रतिस्थापित किया जाना चाहिए। जैसे

$ git push origin master:master

1
धन्यवाद, यह मेरे लिए किया था। git diffकुछ भी नहीं दिखा, और आपने जो वर्णन किया था, उसे करने के बाद मुझे अब यह भ्रामक और कष्टप्रद संदेश नहीं मिलेगा।
लॉन्ड्रोमेट

1
और अधिक अपवाह की जरूरत है :)। उच्च-मतदान के जवाब मेरे लिए सभी "कोई प्रभाव नहीं" थे (यानी "git fetch" - कुछ भी नहीं किया ... "git Remote show Origin" की जाँच करें - कुछ भी गलत नहीं, कुछ भी बदलने की आवश्यकता नहीं)
Adam

24

कभी-कभी ओरिजिनल मास्टर (मूल / मास्टर) और वास्तविक मूल मास्टर के स्थानीय कैश्ड संस्करण में अंतर होता है।

यदि आप इसे चलाते हैं तो git remote updateमूल / मूल के साथ मूल गुरु को फिर से लिख देगा

इस प्रश्न का स्वीकृत उत्तर देखें

गिट पुल ओरिजिन मास्टर और गिट पुल ओरिजिन / मास्टर के बीच अंतर


10

मुझे लगा कि मेरा लैपटॉप मूल था ...

यह एक प्रकार की निरर्थक बात है: originडिफ़ॉल्ट दूरस्थ रिपॉजिटरी को संदर्भित करता है - वह जिसे आप आमतौर पर दूसरे लोगों के परिवर्तनों से प्राप्त / खींचते हैं।

मैं कैसे कर सकता हूँ:

  1. git remote -vआपको दिखाएगा कि क्या originहै; रिपॉजिटरी origin/masterकी masterशाखा के अंतिम ज्ञात राज्य के लिए आपका "बुकमार्क" originहै, और आपका खुद के masterलिए एक ट्रैकिंग शाखा है origin/masterयह सब वैसा ही है जैसा होना चाहिए

  2. तुम नहीं। कम से कम यह एक रिपॉजिटरी के लिए खुद के लिए डिफ़ॉल्ट रिमोट रिपॉजिटरी होने का कोई मतलब नहीं है।

  3. यह नहीं है। यह केवल आपको बता रहा है कि आपने स्थानीय रूप से बहुत सारे कमिट किए हैं जो दूरस्थ रिपॉजिटरी (उस रिपॉजिटरी की अंतिम ज्ञात स्थिति के अनुसार) में नहीं हैं।


1
मैंने मान लिया कि मेरा लैपटॉप मूल था क्योंकि मैंने पहली बार रिपॉजिटरी बनाई थी (जहाँ इसकी उत्पत्ति हुई थी)।
ब्रायन केली

1
इसके विपरीत, यह पूरी तरह से मेरे लिए originस्थानीय स्तर पर लैपटॉप को इंगित करने के लिए समझ में आता है , क्योंकि ऑफ़लाइन या स्विचिंग नेटवर्क लैपटॉप के लिए पोर्टेबल उपकरणों के लिए एक बहुत ही सामान्य मामला है। इस तरह से आप उपयोग कर सकते हैं git pushऔर git pullकिसी भी समय, इस बारे में सोचने की आवश्यकता नहीं है कि क्या आप वर्तमान में सही नेटवर्क से जुड़े हैं। originवर्तमान रोमिंग स्थिति के आधार पर, नेटवर्क लिंक उपलब्ध होने पर यह स्थानीय स्वचालित रूप से वास्तविक रीमोट के साथ समन्वयित हो सकता है। समस्याग्रस्त हिस्सा यह है कि कब कौन सा सिंक चलाया जाए, इसकी तुलना में जीआईटी भाग काफी आसान है।
टीनो

2
अपने लैपटॉप originपर एक और रिपॉजिटरी की ओर इशारा करना सही समझ में आता है, निश्चित है। हालांकि origin, रिपॉजिटरी की ओर इशारा करना अपने आप में यह नहीं है: इससे कोई फर्क नहीं पड़ेगा कि आप जो भी चलाते हैं git pushया जो भी करते हैं git pull, क्योंकि रिपॉजिटरी हमेशा वैसे भी खुद के साथ हमेशा सिंक होती है। यह गलत है, तनातनी का प्रकार।
अरस्तू पगलतज़िस

3

[ उपाय ]

$ git push origin

^ यह मेरे लिए हल है। यह क्या किया, यह मेरे मास्टर (लैपटॉप पर) "मूल" के साथ सिंक्रनाइज़ किया गया है जो दूरस्थ सर्वर पर है।


1

मैं इस समस्या से जूझ रहा हूं और पिछले उत्तरों में से कोई भी इस प्रश्न से नहीं निपटता है जैसा कि मैं देखता हूं। मैंने समस्या को वापस उसके मूल में ले लिया है यह देखने के लिए कि क्या मैं अपनी समस्या को स्पष्ट कर सकता हूं।

मैं एक नया रिपॉजिटरी (rep1) बनाता हूं, उसमें एक फाइल डालकर कमिट करता हूं।

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

मैं rep1 का एक क्लोन बनाता हूं और इसे rep2 कहता हूं। मैं rep2 के अंदर देखता हूं और देखता हूं कि फाइल सही है।

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

Rep1 में मैं फ़ाइल में एक बदलाव करता हूं और इसे कमिट करता हूं। फिर rep1 में मैं rep2 को इंगित करने और परिवर्तनों को आगे बढ़ाने के लिए एक रिमोट बनाता हूं।

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

अब जब मैं rep2 में जाता हूं और 'git स्टेटस' करता हूं तो मुझे लगता है कि मैं मूल से आगे हूं।

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

RE2 में README वैसा ही है जैसा कि मूल रूप से, दूसरे वचन से पहले था। केवल जो संशोधन मैंने किए हैं, वे rep1 करने के लिए हैं और सभी जो मैं करना चाहता था, उन्हें rep2 में धकेल दिया गया। यह क्या है मैं लोभी नहीं हूँ?


1
दो चीजें: rep2 का "मूल / मास्टर" चेक वास्तव में rep1 को नहीं देखता है। यदि आप rep2 में 'गिट पुल' करते हैं, तो यह ध्यान देगा कि वे एक ही स्थिति में हैं और शिकायत करना बंद कर देते हैं। वास्तव में एक काम की नकल में एक धक्का से परिवर्तन देखने के लिए, आपको एक 'गिट चेकआउट' करने की ज़रूरत है - धक्का कभी भी रेपो के काम की नकल को नहीं छूता है।
वाल्टर मुंड

मैंने सोचा था कि यह मामला हो सकता है, लेकिन मुझे "GIT चेकआउट M README प्राप्त हुआ है" आपकी शाखा 1 वचन द्वारा 'मूल / मास्टर' से आगे है। लेकिन मेरी काम करने की प्रतिलिपि वास्तव में 1 प्रतिबद्ध से पीछे है, आगे नहीं।
स्टीव हिंडर्म जूल


1

मुझे हाल ही में यह समस्या थी और मुझे लगा कि मैंने कुछ फाइलें हटा दी हैं, जिनकी मुझे अब कोई आवश्यकता नहीं थी। समस्या यह है कि गिट को पता नहीं है कि फाइलें हटा दी गई हैं और यह देखता है कि सर्वर अभी भी है। (सर्वर = उत्पत्ति)

तो मैं भागा

git rm $(git ls-files --deleted)

और फिर एक प्रतिबद्ध और धक्का दिया।

इससे समस्या हल हो गई।


1
यह तभी काम करता है जब प्रतिबद्ध संदेश डिलीट - <फ़ाइल का नाम>
looneydoodle

1

मैं एक नौसिखिया नौसिखिया हूँ। मुझे यही समस्या थी कि 'आपकी शाखा N के द्वारा मूल / मास्टर से आगे है' संदेशों से। सुझाए गए 'गिट डिफरेंट ओरिजिन / मास्टर' ने कुछ भिन्नताएँ दिखाईं, जिन्हें ध्यान में रखना मेरे लिए संभव नहीं था। इसलिए ...

चूँकि मेरा git क्लोन होस्टिंग के लिए था, और मैं मास्टर रेपो की एक सटीक प्रतिलिपि चाहता था, और किसी भी स्थानीय परिवर्तन को रखने की परवाह नहीं करता था, मैंने अपने पूरे रेपो को बचाने का फैसला किया, और एक नया निर्माण किया:

(होस्टिंग मशीन पर)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

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

/ नारा


0

मैं अपने रेपो के बारे में एक ही बात सोच रहा था। मेरे मामले में मेरे पास एक पुराना रिमोट था जिसे मैं अब और आगे नहीं बढ़ा रहा था इसलिए मुझे इसे हटाने की आवश्यकता थी।

रिमूव की सूची प्राप्त करें:

git remote

उस एक को हटा दें जिसकी आपको आवश्यकता नहीं है

git remote rm {insert remote to remove}

0

अपनी खुद की जगह लेने से पहले एक विशिष्ट प्रतिबद्ध पर रीसेट करना संभव है।

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

का प्रयोग करें git logक्या प्रतिबद्ध प्रतिबद्ध आप इससे पहले स्थानीय परिवर्तन जगह ले ली थी खोजने के लिए।

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

स्थानीय कमिट्स पर ध्यान दें और सीधे पिछले कमिट पर रीसेट करें:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

-1

मुझे समस्या थी "एनएन के द्वारा आपकी शाखा 'मूल / मास्टर' से आगे है।" जब मैंने दूरस्थ रिपॉजिटरी के साथ धक्का दिया:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

जब मैंने पाया कि मेरा रिमोट एडिट फ़ाइल में था।

git push

समस्या गायब हो गई।

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