git - with - मैं मास्टर/उत्पत्ति के साथ अलग सिर को कैसे जोड़ सकता हूं?




integrate git bash with visual studio code (16)

अपनी अलग-अलग प्रतिबद्धता को अपनी शाखा में प्राप्त करें

बस git checkout -b mynewbranch

फिर git log चलाएं, और आप देखेंगे कि प्रतिबद्धता अब इस नई शाखा पर है।

मैं गिट की शाखाओं की जटिलताओं में नया हूं। मैं हमेशा एक शाखा पर काम करता हूं और परिवर्तन करता हूं और फिर समय-समय पर अपने रिमोट उत्पत्ति को दबाता हूं।

हाल ही में, मैंने कुछ फाइलों को रीसेट करने के लिए उन्हें रीसेट करने के लिए रीसेट किया था, और बाद में दो हालिया स्थानीय rebase -i से छुटकारा पाने के लिए एक rebase -i किया। अब मैं एक ऐसे राज्य में हूं जो मुझे समझ में नहीं आता है।

मेरे कामकाजी क्षेत्र में, git log बिल्कुल दिखाता है कि मैं क्या उम्मीद करूंगा - मैं उस काम के साथ सही ट्रेन पर हूं जहां मैं नहीं जाना चाहता था, और वहां नए लोग इत्यादि।

लेकिन मैंने सिर्फ रिमोट रिपोजिटरी को धक्का दिया, और क्या अलग है - रिबेज में जो कुछ काम मैंने मारा था, उसे धक्का दिया गया, और स्थानीय रूप से किए गए नए लोग वहां नहीं हैं।

मुझे लगता है कि "मास्टर / उत्पत्ति" को सिर से अलग किया गया है, लेकिन मैं इसका मतलब क्या नहीं है, कमांड लाइन टूल्स के साथ इसे कैसे देखना है, और इसे कैसे ठीक किया जाए, इस पर 100% स्पष्ट नहीं है।


अगर आपके पास सिर्फ मास्टर शाखा है और "विकास" या फीचर पर वापस जाना चाहते हैं तो बस ऐसा करें:

git checkout origin/develop

नोट: मूल / विकास की जांच।

आप अलग सिर राज्य में हैं। आप चारों ओर देख सकते हैं, प्रयोगात्मक परिवर्तन कर सकते हैं और उन्हें प्रतिबद्ध कर सकते हैं, और आप किसी अन्य चेकआउट करके किसी भी शाखा को प्रभावित किए बिना इस राज्य में किए गए किसी भी काम को त्याग सकते हैं ...

फिर

git checkout -b develop

यह काम करता हैं :)


आपको बस इतना करना है कि 'गिट चेकआउट [शाखा-नाम]' जहां [शाखा-नाम] मूल शाखा का नाम है जहां से आप एक अलग सिर राज्य में आ गए हैं। (Asdfasdf से अलग) गायब हो जाएगा।

तो उदाहरण के लिए, शाखा 'देव' में आप प्रतिबद्ध asdfasd14314 -> जांचते हैं

'git checkout asdfasd14314'

अब आप एक अलग सिर राज्य में हैं

'गिट शाखा' कुछ सूचीबद्ध करेगा ->

* (detached from asdfasdf)
  dev
  prod
  stage

लेकिन अलग सिर राज्य से बाहर निकलने के लिए और वापस देव ->

'git checkout dev'

और फिर 'गिट शाखा' सूची ->

* dev
  prod
  stage

लेकिन यह निश्चित रूप से है यदि आप अलग-अलग सिर राज्य से कोई भी परिवर्तन करने का इरादा नहीं रखते हैं, लेकिन मुझे लगता है कि कोई भी बदलाव करने का इरादा नहीं रखता है बल्कि पिछले प्रतिबद्धता को देखने के लिए


जब मैं व्यक्तिगत रूप से किसी स्थिति में खुद को ढूंढता हूं, जब यह पता चला कि मैंने कुछ बदलाव किए हैं, जबकि मैं master में नहीं हूं (यानी HEAD master ठीक ऊपर अलग है और इसमें कोई काम नहीं है) छेड़छाड़ करने में मदद मिल सकती है:

git stash # HEAD has same content as master, but we are still not in master
git checkout master  # switch to master, okay because no changes and master
git stash apply  # apply changes we had between HEAD and master in the first place

निम्नलिखित मेरे लिए काम किया (केवल शाखा मास्टर का उपयोग कर):

git push origin HEAD:master
git checkout master        
git pull

पहला व्यक्ति अलग-अलग सिर को दूरस्थ उत्पत्ति पर धक्का देता है।

दूसरा मास्टर शाखा में चला जाता है।

तीसरा व्यक्ति हेड को पुनः प्राप्त करता है जो शाखा मास्टर से जुड़ा होता है।

यदि धक्का खारिज हो जाता है तो समस्याएं पहले कमांड पर उत्पन्न हो सकती हैं। लेकिन यह अब अलग सिर की समस्या नहीं होगी, लेकिन इस तथ्य के बारे में है कि अलग-अलग सिर कुछ दूरस्थ परिवर्तनों से अवगत नहीं है।


बस यह करो:

git checkout master

या, यदि आपके पास ऐसे परिवर्तन हैं जिन्हें आप रखना चाहते हैं, तो ऐसा करें:

git checkout -b temp
git checkout -B master temp

मुझे एक ही समस्या थी और मैंने निम्नलिखित चरणों के माध्यम से इसे हल किया है।

अगर आपको अपने बदलावों को रखने की जरूरत है

  1. सबसे पहले आपको मास्टर शाखा में वापस रखने के लिए git checkout master कमांड चलाने की आवश्यकता है।
  2. यदि आपको अपने परिवर्तनों को रखने की आवश्यकता है तो बस git checkout -b changes और git checkout -B master changes चलाएं

अगर आपको अपने बदलावों की आवश्यकता नहीं है

  1. अपनी शाखा रन git clean -df से सभी अनचाहे फ़ाइलों को git clean -df

  2. फिर आपको अपने भंडार के भीतर सभी अस्थिर परिवर्तनों को साफ़ करने की आवश्यकता है। ऐसा करने के लिए आपको git checkout -- चलाने की ज़रूरत है git checkout --

  3. अंत में आपको git checkout master कमांड का उपयोग कर अपनी शाखा को मास्टर शाखा में वापस रखना होगा।


मेरे मामले में, मैं git status चलाता हूं और मैंने देखा कि मेरे पास मेरी कार्यशील निर्देशिका पर कुछ अनचाहे फ़ाइलें थीं।

रिबेस काम करने के लिए, मुझे बस उन्हें साफ करना पड़ा (क्योंकि मुझे उनकी आवश्यकता नहीं थी)।


मैं आज इस मुद्दे में भाग गया। बहुत यकीन है कि मैंने इसे हल करके हल किया है:

git branch temp
git checkout master
git merge temp

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


मैं इस मुद्दे में भाग गया और जब मैंने शीर्ष मतदान जवाब में पढ़ा:

हेड वर्तमान में चेक आउट प्रतिबद्धता के लिए प्रतीकात्मक नाम है।

मैंने सोचा: आह-हा! यदि HEAD currenlty चेकआउट प्रतिबद्धता के लिए प्रतीकात्मक नाम है, तो मैं master खिलाफ इसे पुन: master करके master खिलाफ मेल कर सकता हूं:

git rebase HEAD master

यह आदेश:

  1. master बाहर की जाँच करता है
  2. HEAD की माता-पिता की ओर से HEAD अलग बिंदु पर HEAD पहचान की जाती है
  3. जो master शीर्ष पर चलता है वह खेलता है

अंत परिणाम यह है कि सभी काम करता है जो HEAD में थे लेकिन master नहीं तो master में भी हैं। master अवशेषों की जांच की गई।

रिमोट के बारे में:

रिबेस में मारने वाले कुछ कामों को धक्का दिया गया, और स्थानीय रूप से किए गए नए लोग वहां नहीं हैं।

रिमोट इतिहास अब आपके स्थानीय इतिहास का उपयोग करके तेजी से अग्रेषित नहीं किया जा सकता है। दूरस्थ इतिहास को ओवरराइट करने के लिए आपको बल-पुश ( git push -f ) की आवश्यकता होगी। यदि आपके पास कोई सहयोगी है, तो आमतौर पर यह उनके साथ समन्वय करने के लिए समझ में आता है ताकि सभी एक ही पृष्ठ पर हों।

रिमोट origin लिए master को धक्का देने के बाद, आपकी रिमोट ट्रैकिंग शाखा origin/master को origin/master के समान प्रतिबद्धता को इंगित करने के लिए अपडेट किया जाएगा।


यदि आप अपने वर्तमान अलग सिर को धक्का देना चाहते हैं (पहले git log जांचें), तो कोशिश करें:

git push origin HEAD:master

मूल रूप से मास्टर शाखा में अपने अलग सिर भेजने के लिए। यदि आपका पुश अस्वीकार हो जाता है, तो git pull origin master से परिवर्तन प्राप्त करने के लिए पहले git pull origin master आज़माएं। यदि आपको मूल से परिवर्तनों की परवाह नहीं है और इसे अस्वीकार कर दिया गया है, क्योंकि आपने कुछ जानबूझकर rebase किया है और आप मूल रूप से अलग शाखा के साथ मूल / मास्टर को प्रतिस्थापित करना चाहते हैं - तो आप इसे ( -f ) बल दे सकते हैं। यदि आप पिछले कामों तक कुछ पहुंच खो देते हैं, तो आप हमेशा सभी शाखाओं के इतिहास को देखने के लिए git reflog चला सकते हैं।

मास्टर शाखा पर वापस आने के लिए, परिवर्तनों को रखते हुए, निम्न आदेशों को आज़माएं:

git rebase HEAD master
git checkout master

देखें: गिट: "वर्तमान में किसी भी शाखा पर नहीं।" परिवर्तनों को रखते हुए, शाखा पर वापस आने का कोई आसान तरीका है?


यदि आप ग्रहण में egit का उपयोग कर रहे हैं: मान लें कि आपका मास्टर आपकी मुख्य विकास शाखा है

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

इसके बाद आप मूल-मास्टर को पुनः प्राप्त करने में सक्षम होना चाहिए


यदि आपने कुछ मास्टर के शीर्ष पर काम किया है और बस वहां master को "पीछे की ओर विलय" करना चाहते हैं (यानी आप master को HEAD इंगित करना चाहते हैं), एक-लाइनर होगा:

git checkout -B master HEAD
  1. यह master नाम की एक नई शाखा बनाता है, भले ही यह पहले से मौजूद है (जो master ले जाने जैसा है और यही वह है जिसे हम चाहते हैं)।
  2. नव निर्मित शाखा HEAD को इंगित करने के लिए तैयार है, जहां आप हैं।
  3. नई शाखा की जांच की जाती है, इसलिए आप बाद में master पर हैं।

मैंने इसे उप-भंडारों के मामले में विशेष रूप से उपयोगी पाया, जो अक्सर अलग राज्य में भी होता है।


यह मेरे लिए पूरी तरह से काम किया:

1. अपने स्थानीय संशोधन को बचाने के लिए git stash

यदि आप परिवर्तनों को त्यागना चाहते हैं
git clean -df
git checkout -- .
गिट क्लीन सभी अनचाहे फ़ाइलों को हटा देता है (चेतावनी: जबकि यह सीधे .gitignore में उल्लिखित अनदेखी फ़ाइलों को हटा नहीं देगा, यह फ़ोल्डर में रहने वाली अनदेखी फ़ाइलों को हटा सकता है) और गिट चेकआउट सभी अस्थिर परिवर्तनों को साफ़ करता है।

2. मुख्य शाखा में स्विच करने के लिए git checkout master (मान लीजिए कि आप मास्टर का उपयोग करना चाहते हैं)
3. मास्टर शाखा से अंतिम प्रतिबद्ध git pull लिए git pull
4. सबकुछ जांचने के लिए git status अच्छी लगती है

On branch master
Your branch is up-to-date with 'origin/master'.

सरल शब्दों में, पृथक हेड स्टेट का मतलब है कि आपको किसी भी शाखा के हेड (या टिप) की जांच नहीं की जाती है

उदाहरण के साथ समझें

ज्यादातर मामलों में एक शाखा कई प्रतिबद्धताओं का अनुक्रम है: -

प्रतिबद्ध 1: मास्टर -> शाखा_एचईएडी (123be6a76168aca712aea16076e971c23835f8ca)

प्रतिबद्ध 2: मास्टर -> 123be6a76168aca712aea16076e971c23835f8ca -> शाखा_एचईएडी (100644a76168aca712aea16076e971c23835f8ca)

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

सैद्धांतिक स्पष्टीकरण

इस ब्लॉग में यह स्पष्ट रूप से बताता है कि गिट रिपोजिटरी एक पेड़-ऑफ-कॉमिट्स है, प्रत्येक प्रतिबद्धता के साथ प्रत्येक पूर्व संकेतक के साथ अपने पूर्वजों को इंगित करने वाला प्रत्येक प्रतिबद्धता अद्यतन किया जाता है और प्रत्येक शाखा के इन पॉइंटर्स को .git / refs उप-निर्देशिका में संग्रहीत किया जाता है। टैग .git / refs / टैग में संग्रहीत हैं और शाखाएं .git / refs / head में संग्रहीत हैं। यदि आप किसी भी फाइल को देखते हैं, तो आप पाएंगे कि प्रत्येक टैग एक फ़ाइल के अनुरूप है, जिसमें 40-वर्ण प्रतिबद्ध हैश है और जैसा कि @ क्रिस जॉनसन और @ यरोस्लाव निकितेंको द्वारा ऊपर बताया गया है, आप इन संदर्भों को देख सकते हैं


git checkout origin/master करने के बजाय

बस git checkout master

तो git branch आपकी शाखा की पुष्टि करेगी।





git