2010-03-25 16 views
7

reflog vs GITK http://siteroller.net/archive/images/Forums/headless%20GIT.pngGit: Git reflog: सिर गायब हो गया है, गुरु

में मर्ज करना चाहते हैं शीर्ष छवि के उत्पादन में है।
नीचे क्या GIT जीयूआई (msysgit) में GITK मुझे पता चलता है जब मैं सभी शाखा इतिहास को देखो है।

पिछले कुछ करता GIT GUI पर दिखाई नहीं देते हैं।

  • क्यों वे GITK पर नहीं दिखा (कम से कम एक शाखा या कुछ और के रूप में)?
  • मैं इन्हें मास्टर में मर्ज करते हैं?
  • मैं यह हुआ जब मैं टैग 0.42 बाहर जाँच इकट्ठा होते हैं। वह मास्टर के समान क्यों नहीं है? (मैं अपनी नवीनतम राज्य में मास्टर टैग किया था)
  • जब मैं धक्का क्लिक करें, क्यों दूरस्थ रेपो दावा तारीख तक होने के लिए करता है .. इसे में इन करता है जो कुछ भी शाखा वे में हैं अद्यतन करने के लिए कोशिश नहीं करनी चाहिए?

प्रश्नों में से पहला महत्वपूर्ण है - मैं यह समझना शुरू करना चाहता हूं कि जीआईटी क्या सोच रहा है। इस बिंदु पर तर्क से यह अधिक ऑरैकल है।

यदि यह पहले के इतिहास को देखने के लिए एक फर्क नहीं पड़ता, परियोजना एक [बहुत शक्तिशाली] जे एस रंग पिकर कि अपनी संपूर्णता में viewed here हो सकता है।

+0

छवि टूट गई है (और इस प्रकार बेकार), क्या आप या तो छवि को एक नए स्थान पर रख सकते हैं या हमें क्या देखना चाहिए के एसीसी संस्करण शामिल कर सकते हैं? –

उत्तर

10

क्यों में इन करता है जो कुछ भी शाखा वे में हैं अद्यतन करने के लिए?

सिर्फ यह है कि: आप किसी भी शाखा में नहीं हैं लेकिन वर्तमान में एक detached head पर काम कर रहा:

संस्करण 1.5.0 से शुरू, उपरोक्त आदेश अपने HEAD वर्तमान शाखा से और सीधे detaches टैग द्वारा नामित प्रतिबद्धता पर अंक।

यदि आप एक gitk --all

एक तरह से इसे ठीक करने के लिए (यदि आप प्रतिबद्ध है सब कुछ) आप इसे देख सकते हैं

$ git log -1 
# note the SHA-1 of latest commit 
$ git checkout master 
# reset your branch head to your previously detached commit 
$ git reset --hard <commit-id> 

एक और तरीका है वर्तमान मास्टर में अपने काम विलय करने के लिए किया जाएगा सिर जो होता है टैग में होना:

$ git checkout -m 0.42 

लेकिन यह है कि आपके प्रतिबद्ध मीटर के इतिहास खो देता है एक अलग सिर पर ade।


मैं यह हुआ जब मैं टैग 0.42 बाहर जाँच इकट्ठा होते हैं। वह मास्टर के समान क्यों नहीं है? (मैंने मास्टर को अपने नवीनतम राज्य में टैग किया था)

नहीं, यह मास्टर की तुलना में समान नहीं है। Jefromi टिप्पणी में बताते हैं, शाखा स्थानांतरित कर सकते हैं (या नाम दिया जा, या नष्ट कर दिया, या ...)
master ही '0.42' टैग से प्रतिबद्ध करने के लिए बात कर रहे थे, लेकिन वह हमेशा ऐसा नहीं होगा।
टैग के चेकआउट के साथ, आप एक शाखा की जांच नहीं करते हैं, इसलिए 'अलग सिर' राज्य।


नोट: के रूप में this SO answer में उल्लेख किया है, @{1} अंकन आप देखते हैं, $(git symbolic-ref HEAD)@{1} है अर्थात यह है वर्तमान (यहां अलग) शाखा, नहीं HEAD reflog के लिए reflog उपयोग करता है।

+0

स्पष्टीकरण: आपने टैग को चेक आउट किया है, जो उस विशेष प्रतिबद्धता को इंगित करता है। यह शाखा को इंगित नहीं करता है। (यह नहीं कर सकता - शाखा स्थानांतरित हो सकती है!) शाखा और टैग अभी एक ही स्थान पर हो सकता है। आपने टैग को चेक आउट किया है, हालांकि, गिट ने जांच की है कि आपके सिर को प्रतिबद्ध और अलग किया गया है। – Cascabel

+0

@ जेफ्रोमी: मैं अभी भी जवाब संपादित कर रहा हूं, नवीनतम संपादन में से एक केवल आपकी स्पष्टीकरण का उल्लेख करता है;) – VonC

+0

क्योंकि मैंने एक टैग की जांच की - जो आगे बढ़ सकता है - और फिर चीजों को बदलना शुरू कर दिया, मैं अलग-अलग सिर पर हूं। एक अलग सिर एक शाखा नहीं है, और इसलिए दूरस्थ रूप से प्रदर्शित या अद्यतन नहीं करता है। समझे, हालांकि मुझे अभी भी समझ में नहीं आता है कि क्यों नहीं [अन्य धागे पर आपकी टिप्पणी के बावजूद]। मुझे विलय निर्देशों को समझ में नहीं आता है। मैंने पहले से ही चेकआउट को मास्टर करने के लिए किया है, और प्रतिबद्धता के SHA को जानते हैं (रीफ्लॉग छवि देखें)। क्या अब मैं बस रीसेट कर रहा हूँ? यदि हां, तो कौन सा प्रतिबद्ध आईडी .. b88fd04? – SamGoody

2

अपने कामों को पुनर्जीवित करने का सबसे आसान तरीका कुछ शाखा प्रमुखों को इंगित करना है। आप शास पता है, तो यह आसान है:

git branch resurrected_junk 1b8c11d 

(यह एक SHA अपने स्क्रीनशॉट से पढ़ी जाती है), भी

git branch resurrected_junk [email protected] 

यह आपके खो प्रतिबद्ध का सबसे हाल के लिए एक शाखा इंगित करेगा हो सकता है - पहले के लोग शायद सबसे हालिया माता-पिता हैं, इसलिए वे इस नई शाखा में होंगे; अगर वे नहीं हैं (इसका मतलब है कि खोए गए कामों की दो "छाया शाखाएं" हैं), तो आपको सभी कामों की समीक्षा करनी होगी और गायब होने वाली गतिविधियों के लिए प्रक्रिया दोहराएं।

आपके मामले में, मुझे लगता है कि आप इस तरह से एक इतिहास मिल जाएगा: तब

Master --> Optimize toRGB --> ... ---> shortened toRGB = resurrected_junk 

, अपने gitk दृश्य रीफ़्रेश करके करता दिखाई देने लगेगा। (मैं qgit का उपयोग कर रहा हूं, इसलिए मैं अनुमान लगा रहा हूं)

उसके बाद, आप जो कुछ भी चाहते हैं उसे विलय/पुश करने में सक्षम होना चाहिए (जैसा आपको पसंद है)।

+0

कृपया अधिक वर्णनात्मक बनें - मुझे समझ में नहीं आता है। मैं किस प्रतिबद्धता के लिए पुनरुत्थान_जंक करता हूं; मेरे अलग-अलग कामों में से जल्द, उनमें से नवीनतम, या उन सभी के लिए? इसके अलावा, इसका मतलब क्या है "यह भी हो सकता है" .. यदि मैं गिट शाखा पुनरुत्थान_जंक हेड @ 1 करता हूं तो क्या मेरे पास मास्टर में खुशी से सबकुछ होगा जहां मुझे इसकी आवश्यकता है? क्या मुझे शाखाएं करनी होंगी जिन्हें मैं एक साथ विलय कर सकता हूं? – SamGoody

+0

नवीनतम प्रतिबद्धता; "यह भी हो सकता है" का मतलब है कि हेड @ 1 आपके मामले में 1b8c11d के लिए बस एक सुविधाजनक नाम है। यह आपके काम को मास्टर में नहीं रखेगा, एक और शाखा होगी। यदि आप चाहें तो आप मास्टर में इसे मर्ज करने में सक्षम होंगे; यह आपके मामले में एक आसान फास्ट-फॉरवर्ड विलय होना चाहिए। – jpalecek

3

गिट में एक निर्देशित विश्वकोश ग्राफ बनता है जहां प्रत्येक प्रतिबद्धता एक या अधिक माता-पिता को इंगित करती है। प्रतिबद्ध वस्तुओं के अलावा आपके पास रेफरी (यानी संदर्भ) वस्तुएं हैं: शाखाएं और टैग। वे प्रतिबद्ध ग्राफ में विभिन्न प्रतिबद्धताओं को इंगित करते हैं। आपकी समस्या यह है कि जब आप काम करते थे और कोई शाखा (या टैग) अंक नहीं देते थे तो आप शाखा में नहीं थे। किसी भी समय आप की जाँच करने के लिए कि क्या आप एक शाखा पर हैं या नहीं आदेशों

git status 

और

git branch 

उपयोग कर सकते हैं।

वे जीआईटीके (कम से कम एक शाखा या कुछ के रूप में) पर क्यों नहीं दिखते हैं?

जहां तक ​​मुझे पता है कि गिटक रेफरी से शुरू होने वाली प्रतिबद्ध वस्तुओं की तलाश में है। यदि आपके कामों के लिए कोई रेफरी पॉइंट नहीं है (या निर्देशित आभासी ग्राफ जो उन्हें ले जाता है) वे प्रभावी रूप से अदृश्य होते हैं।

मैं उन्हें मास्टर में कैसे विलय कर सकता हूं?

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

1b8c11d HEAD @ {1} के लिए प्रतिबद्ध: छोटा toRgb() फ़ंक्शन

आप अपने गुरु के लिए प्रतिबद्ध विलय करने के लिए सक्षम होना चाहिए SHA1 आईडी आप reflog में देखते हैं का उपयोग करके शाखा:

git checkout master 
git merge 1b8c11d 

मैं यह हुआ जब मैं टैग 0.42 बाहर जाँच इकट्ठा होते हैं। वह मास्टर के समान क्यों नहीं है? (मैंने मास्टर को अपने नवीनतम राज्य में टैग किया था)

शाखाओं और टैग के बीच मुख्य अंतर यह है कि एक टैग हमेशा एक ही प्रतिबद्धता को इंगित करता है लेकिन एक शाखा आगे बढ़ती है। उदाहरण के लिए, यदि आप शाखा "मास्टर" पर हैं और एक नई प्रतिबद्धता बनाते हैं, तो "मास्टर" शाखा आगे बढ़ती है और आपके द्वारा बनाई गई नई प्रतिबद्धता को इंगित करती है। जब आप चेकआउट करते हैं, टैग या शाखाएं गिट आपके आदेशों को सचमुच ले जाती है और आपने जो भी पूछा है उसे ठीक से जांचता है।

जब मैं पुश पर क्लिक करता हूं, तो रिमोट रेपो का अद्यतित होने का दावा क्यों होता है .. क्या यह इन गतिविधियों को अपडेट करने की कोशिश नहीं कर सकता है, जो वे हैं?

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

+0

मैंने इसका पालन '' 'गिट लॉग -1''' के साथ किया। – DesignerGuy

संबंधित मुद्दे