2009-08-01 9 views
30

तो, मैं एक भंडार बनाने के लिए गिट जीयूआई का उपयोग कर रहा हूं। लेकिन मुझे Google, दस्तावेज़ीकरण, या कहीं और कोई भी 'रेज़िशन एक्सप्रेशन' नहीं है, और इसे एक नई शाखा बनाने की आवश्यकता है।गिट संशोधन अभिव्यक्ति क्या है?

इसके अलावा, ऐसा लगता है कि इस कार्यक्रम में कई अन्य स्थानों का उपयोग किया जाता है, इसलिए मुझे विश्वास है कि यह जानना महत्वपूर्ण है।

मुझे स्टैक ओवरफ्लो पर इस पर एक प्रश्न मिला, लेकिन उस व्यक्ति को कभी जवाब नहीं मिला।

मुझे बस यह जानने की ज़रूरत है: एक संशोधन अभिव्यक्ति क्या है?

+0

यदि आप रिमोट से अपने स्थानीय (मेरे लिए मास्टर) में परिवर्तनों को मर्ज करना चाहते हैं, तो आप रिमोट/मास्टर – cgao

उत्तर

32

Git आम संचालन

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

git log HEAD 

HEAD अंततः निराकरण के लिए एक विशिष्ट प्रतिबद्ध, और आप उस के लिए लॉग दी जाएगी। आप यह भी कह सकते हैं:

git log master 

master एक शाखा है, और के लिए एक विशिष्ट प्रतिबद्ध है कि भी समाधान हो जाएगा।

git log fd72e9c99312 

अब यह वास्तविक प्रतिबद्धता है।


नीचे दिए गए दस्तावेज़ों को आप जो खोज रहे हैं वह है। कमांड प्रलेखन से http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html पर लिया गया।

को निर्दिष्ट संशोधन

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

पूर्ण SHA1 ऑब्जेक्ट नाम (40-बाइट हेक्साडेसिमल स्ट्रिंग), या इस तरह का एक सबस्ट्रिंग जो भंडार के भीतर अद्वितीय है। जैसे dae86e1950b1277e545cee180551750029cfe735 और dae86e दोनों एक ही प्रतिबद्ध वस्तु का नाम देते हैं यदि आपके भंडार में कोई अन्य ऑब्जेक्ट नहीं है जिसका ऑब्जेक्ट नाम dae86e से शुरू होता है।

गिट-वर्णन से एक आउटपुट; यानी एक निकटतम टैग, वैकल्पिक रूप से एक डैश और कई कामों के बाद, एक डैश, एक जी, और एक संक्षिप्त ऑब्जेक्ट नाम के बाद।

एक प्रतीकात्मक रेफ नाम। जैसे मास्टर आमतौर पर $ GIT_DIR/refs/head/master द्वारा संदर्भित प्रतिबद्ध वस्तु का अर्थ है। यदि आपके पास दोनों प्रमुख/मास्टर और टैग/मास्टर होते हैं, तो आप स्पष्ट रूप से सिर/मास्टर को गिट बताने के लिए कह सकते हैं जिसका मतलब है।जब संदिग्ध, निम्नलिखित नियमों में पहला मैच लेकर असंबद्ध हो जाता है:

यदि $ GIT_DIR/मौजूद है, तो आपका मतलब यह है कि यह आमतौर पर हेड, FETCH_HEAD, ORIG_HEAD और MERGE_HEAD के लिए उपयोगी होता है);

अन्यथा, $ GIT_DIR/refs/मौजूद है;

अन्यथा, $ GIT_DIR/refs/टैग/यदि मौजूद है;

अन्यथा, $ GIT_DIR/refs/head/मौजूद है;

अन्यथा, $ GIT_DIR/refs/remotes/यदि मौजूद है;

अन्यथा, $ GIT_DIR/refs/// मौजूद होने पर HEAD को हटा देता है।

HEAD नाम है कि काम करने वाले पेड़ में आपके बदलावों पर आधारित है। FETCH_HEAD आपके अंतिम गिट-फ़ेच इनवोकेशन के साथ रिमोट रिपोजिटरी से प्राप्त शाखा को रिकॉर्ड करता है। ORIG_HEAD उन आदेशों द्वारा बनाया गया है जो आपके सिर को अपने ऑपरेशन से पहले HEAD की स्थिति रिकॉर्ड करने के लिए एक कठोर तरीके से ले जाते हैं, ताकि आप उन्हें आसानी से चलाने से पहले शाखा की नोक को राज्य में वापस बदल सकें। जब आप गिट-मर्ज चलाते हैं तो MERGE_HEAD आपके द्वारा अपनी शाखा में विलय कर रहे प्रतिबद्धताओं को रिकॉर्ड करता है।

एक ब्रेस जोड़ी (उदाहरण के लिए {कल}, {1 महीने 2 सप्ताह 3 दिन 1 घंटा 1 सेकंड पहले} या {1 979-02-26 18:30 में संलग्न दिनांक विनिर्देश के साथ प्रत्यय @ के बाद एक रेफरी 00}) समय में किसी पूर्व बिंदु पर रेफरी के मान को निर्दिष्ट करने के लिए। यह प्रत्यय केवल रेफ नाम के तुरंत बाद उपयोग किया जा सकता है और रेफरी में मौजूदा लॉग ($ GIT_DIR/logs /) होना चाहिए। ध्यान दें कि यह किसी दिए गए समय पर आपके स्थानीय रेफरी की स्थिति को देखता है; उदाहरण के लिए, पिछले हफ्ते आपकी स्थानीय मास्टर शाखा में क्या था। यदि आप कुछ समय के दौरान किए गए कामों को देखना चाहते हैं, तो देखें - और --until।

उस रेफरी के एन-वें पूर्व मान निर्दिष्ट करने के लिए एक ब्रेस जोड़ी (उदा। {1}, {15}) में संलग्न एक सामान्य विनिर्देश के साथ प्रत्यय @ के बाद एक रेफरी। उदाहरण के लिए मास्टर @ {1} मास्टर का तत्काल पूर्व मूल्य है जबकि मास्टर @ {5} मास्टर का 5 वां पूर्व मान है। यह प्रत्यय केवल रेफ नाम के तुरंत बाद उपयोग किया जा सकता है और रेफरी में मौजूदा लॉग ($ GIT_DIR/logs /) होना चाहिए।

आप मौजूदा शाखा के एक रेफ्लॉग पर जाने के लिए एक खाली रेफरी हिस्से के साथ @ निर्माण का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप शाखा ब्लब्ला पर हैं, तो @ {1} का अर्थ ब्लैब्ला @ {1} जैसा है।

विशेष निर्माण @ {-} का मतलब है कि वर्तमान शाखा से पहले की गई शाखा की जांच की गई है।

एक संशोधन पैरामीटर के लिए एक प्रत्यय^उस प्रतिबद्ध वस्तु का पहला अभिभावक है।^का अर्थ है वें माता-पिता (यानी rev^rev^1 के बराबर है)। एक विशेष नियम के रूप में, rev^0 का मतलब है प्रतिबद्धता और इसका उपयोग तब किया जाता है जब rev एक टैग ऑब्जेक्ट का ऑब्जेक्ट नाम होता है जो एक प्रतिबद्ध ऑब्जेक्ट को संदर्भित करता है।

एक प्रत्यय पैरामीटर के लिए एक प्रत्यय ~ का अर्थ है प्रतिबद्ध वस्तु जो नामित प्रतिबद्ध वस्तु का वें पीढ़ी ग्रैंड-पैरेंट है, केवल पहले माता-पिता के बाद। अर्थात। rev ~ 3 rev ^^^ के बराबर है जो rev^1^1^1 के बराबर है। इस फ़ॉर्म के उपयोग के उदाहरण के लिए नीचे देखें।

एक प्रत्यय^ब्रेस जोड़ी (उदाहरण के लिए v0.99.8^{commit}) में संलग्न ऑब्जेक्ट प्रकार का नाम है, इसका मतलब है कि ऑब्जेक्ट एक टैग हो सकता है, और जब तक उस प्रकार की ऑब्जेक्ट नहीं मिल जाती है तब तक टैग को रिकर्सिव रूप से अव्यवस्थित करें या ऑब्जेक्ट को अब और संदर्भित नहीं किया जा सकता है (किस मामले में, बार्फ़)। rev^0 पहले पेश किया गया है rev^{commit} के लिए एक छोटा सा हाथ है।

एक प्रत्यय^एक खाली ब्रेस जोड़ी (उदा। V0.99.8^{}) के बाद इसका मतलब है कि ऑब्जेक्ट एक टैग हो सकता है, और जब तक एक गैर-टैग ऑब्जेक्ट नहीं मिलता है तब तक टैग को रिकर्सिव रूप से अव्यवस्थित करें।

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

एक प्रत्यय: पथ के बाद; यह कोलन से पहले भाग द्वारा नामित पेड़-आइश ऑब्जेक्ट में दिए गए पथ पर ब्लॉब या पेड़ का नाम है।

एक कॉलन, वैकल्पिक रूप से एक मंच संख्या (0 से 3) और एक कोलन के बाद, पथ के बाद; यह दिए गए पथ पर इंडेक्स में एक ब्लॉब ऑब्जेक्ट का नाम है। गायब चरण संख्या (और इसके बाद का कोलोन) चरण 0 प्रविष्टि का नाम देता है। विलय के दौरान, चरण 1 आम पूर्वज है, चरण 2 लक्ष्य शाखा का संस्करण (आमतौर पर वर्तमान शाखा) है, और चरण 3 शाखा से विलय होने का संस्करण है।

जॉन लोलेगर द्वारा यहां एक उदाहरण दिया गया है। दोनों प्रतिबद्ध नोड्स बी और सी प्रतिबद्ध नोड ए के माता-पिता हैं। माता-पिता के कामों को बाएं से दाएं आदेश दिया जाता है।

G H I J 
\/ \/
    D E F 
    \ |/\ 
    \ |/ | 
    \|/ | 
     B  C 
     \ /
     \/
     A 
A =  = A^0 
B = A^ = A^1  = A~1 
C = A^2 = A^2 
D = A^^ = A^1^1 = A~2 
E = B^2 = A^^2 
F = B^3 = A^^3 
G = A^^^ = A^1^1^1 = A~3 
H = D^2 = B^^2 = A^^^2 = A~2^2 
I = F^ = B^3^ = A^^3^ 
J = F^2 = B^3^2 = A^^3^2 
+1

टाइप कर सकते हैं ध्यान दें कि कोई भी 'मैन गिट्रेविजन' (https: // के माध्यम से अधिक विशिष्टता प्रलेखन दस्तावेज तक पहुंच सकता है) www.kernel.org/pub/software/scm/git/docs/gitrevisions.html)। –

9

गैहुआ व्यापक उत्तर देता है। सामान्य स्थिति:

  • एक मौजूदा शाखा का नाम (जैसे, master)
  • एक SHA1 चेकसम के पहले कुछ अंक, सबसे अच्छा से gitk या git log

में आपका स्वागत है Git की अद्भुत दुनिया के लिए कब्जा कर लिया । टीएमआई पाठ्यक्रम के लिए बराबर है ...

+3

टीएमआई = बराबर। सामान्य मामला जवाब = बर्डी। – dreftymac

0

एक और मामला, Emacs का उपयोग करते समय: बस सभी संशोधनों की सूची के लिए Ctrl-x v l टाइप करें। एक नौसिखिया के लिए git के लिए (लेकिन Emacs/सीवीएस के लिए) मुझे देख कर हैरान है कि संशोधन के रूप में सूचीबद्ध किया गया है था:

commit 8d5ab12cd76d5e6098e5894c8713ec605fd9f153 

यह निश्चित रूप से Major.minor.bugfix.build अंकन से एक अच्छा बदलाव है।

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

तो संक्षेप में, जब Emacs संशोधन के लिए संकेत देता है, तो बस उस 40 हेक्स-अंकों की संख्या दर्ज करें।

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