Git में शाखा का हैश कैसे खोजें?


91

एक स्थानीय / दूरस्थ शाखा के नाम को देखते हुए, मैं यह कैसे कर सकता हूँ कि इस शाखा की ओर इशारा करता है?

जवाबों:


148

कमांड git rev-parseआपका दोस्त है, जैसे:

$ git rev-parse development
17f2303133734f4b9a9aacfe52209e04ec11aff4

... या दूरस्थ ट्रैकिंग शाखा के लिए:

$ git rev-parse origin/master
da1ec1472c108f52d4256049fe1f674af69e785d

यह आदेश आम तौर पर बहुत उपयोगी है, क्योंकि यह शाखा नामों को निर्दिष्ट करने के किसी भी तरीके को पार्स कर सकता है git, जैसे:

git rev-parse master~3
git rev-parse HEAD@{2.days.ago}

... आदि।


स्थानीय शाखा के सभी प्रतिबद्ध हैश कैसे देख सकते हैं?
महदी

1
@Kenji: आपको शायद उसके लिए एक नया प्रश्न बनाना चाहिए, लेकिन अगर आप एक शाखा में प्रत्येक कमिट की हैश चाहते हैं foo, तो आप कर सकते हैं:git log --pretty=format:'%H'
मार्क लॉन्गेयर

जब मैं JenkinsFile में अगली पंक्ति चला रहा हूँ: def BranchHash = sh "git rev-parse ${BRANCH-NAME}मुझे मिल रहा है fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.:। गलत क्या है?
एरिल्मा

5

हैश के तहत संग्रहीत किया जाता है .git/refs/, जैसे.git/refs/heads/master

लेकिन git rev-parseमार्क लॉन्गेयर द्वारा सुझाए गए अनुसार प्रोग्राम का उपयोग करें क्योंकि यह अधिक सुरक्षित है।


2

यह मत भूलो कि Git 2.19 (Q2 2018) के बाद, Git SHA1 हैश से SHA2 में एक संक्रमण तैयार करता है: " Git अधिक आधुनिक SHA का उपयोग क्यों नहीं करता है? "

2.25 Git (Q1 2020) के साथ, git rev-parseविकसित होता है और उस संभावित नए हैश को दर्शाता है।

देखें fa26d5e प्रतिबद्ध , cf02be8 प्रतिबद्ध , 38ee26b प्रतिबद्ध , प्रतिबद्ध 37ab8eb , प्रतिबद्ध 0370b35 , प्रतिबद्ध 0253e12 , प्रतिबद्ध 45e2ef2 , 79b0edc प्रतिबद्ध , प्रतिबद्ध 840624f , प्रतिबद्ध 32a6707 , प्रतिबद्ध 440bf91 , 0b408ca प्रतिबद्ध , प्रतिबद्ध 2eabd38 (28 अक्टू 2019), और 1bcef51 प्रतिबद्ध , प्रतिबद्ध ecde49b (05 अक्टूबर 2019) ब्रायन एमbk2204 द्वारा कार्लसन ( )
(द्वारा विलय Junio सी Hamano - gitster- में 28014c1 प्रतिबद्ध, 10 नवंबर 2019)

rev-parse: एक --show-object-formatविकल्प जोड़ें

साइन-ऑफ-बाय: ब्रायन एम। कार्लसन

इनपुट, आउटपुट या स्टोरेज के लिए उपयोग की जाने वाली ऑब्जेक्ट फॉर्मेट को प्रिंट करने के लिए एक विकल्प जोड़ें।
यह शेल स्क्रिप्ट को उपयोग में हैश एल्गोरिथ्म की खोज करने की अनुमति देता है।

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

git rev-parseप्रलेखन अब में शामिल हैं:

--show-object-format[=(storage|input|output)]:

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


Git 2.29 (Q4 2020) के साथ, आप यह सुनिश्चित कर सकते हैं कि किसी शाखा (या किसी अन्य वस्तु) के हैश कमिट को पढ़ने के लिए आपको किस प्रारूप का उपयोग करना चाहिए।

देखें e023ff0 प्रतिबद्ध , 4feb562 प्रतिबद्ध , 8a06d56 प्रतिबद्ध , c49fe07 प्रतिबद्ध , 02a32db प्रतिबद्ध , ceaa4b3 प्रतिबद्ध , eff45da प्रतिबद्ध , b5b46d7 प्रतिबद्ध , प्रतिबद्ध c5aecfc , प्रतिबद्ध e74b606 , प्रतिबद्ध 439d3a1 , प्रतिबद्ध 6c2adf8 , de5737c प्रतिबद्ध , प्रतिबद्ध e0a646e , प्रतिबद्ध 6ff6a67 , 831279d प्रतिबद्ध , प्रतिबद्ध b6e5005 , प्रतिबद्ध 287bb3a , 22f1824 प्रतिबद्ध , db00af9 प्रतिबद्ध ,7187eb1 प्रतिबद्ध , प्रतिबद्ध 98de0b2 , प्रतिबद्ध a5587b8 , प्रतिबद्ध 66b6d43 , 2197f87 प्रतिबद्ध , c0b65ea प्रतिबद्ध , d62607d प्रतिबद्ध , प्रतिबद्ध d482c23 , प्रतिबद्ध 866be6e , 4bacb6d प्रतिबद्ध , प्रतिबद्ध 252a4ee , 368f3cb प्रतिबद्ध , प्रतिबद्ध abe3db1 , प्रतिबद्ध 08fbc5d , प्रतिबद्ध 11b6961 , 9e3bd8a प्रतिबद्ध , d827bce प्रतिबद्ध , ब्रायन एम द्वारा 094a685 (29 जुलाई 2020) । कार्लसन ( bk2204)
देखप्रतिबद्ध 800e6a7 द्वारा (29 जुला 2020) जोहानिस Schindelin ( dscho)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध e0ad957 , 11 अगस्त 2020)

docs: के लिए प्रलेखन जोड़ें extensions.objectFormat

साइन-ऑफ-बाय: ब्रायन एम। कार्लासन
समीक्षित द्वारा: एरिक सनशाइन

extensions.objectFormatकॉन्फ़िगरेशन सेटिंग को दस्तावेज़ित करें ।
उपयोगकर्ताओं को इसे स्वयं संशोधित न करने की चेतावनी दें।

git configअब इसके मैन पेज में शामिल हैं :

extensions.objectFormat

उपयोग करने के लिए हैश एल्गोरिथ्म निर्दिष्ट करें।

स्वीकार्य मूल्य हैं sha1और> sha256
यदि निर्दिष्ट नहीं है, sha1तो मान लिया गया है।
यह कुंजी तब तक निर्दिष्ट करने के लिए एक त्रुटि है जब तक core.repositoryFormatVersionकि 1 नहीं है।

ध्यान दें कि यह सेटिंग केवल git initया उसके द्वारा सेट की जानी चाहिए git clone
आरंभीकरण के बाद इसे बदलने की कोशिश नहीं की जाएगी और कठिन-से-निदान मुद्दों का उत्पादन करेगा।


स्पष्ट होने के लिए, Git 2.29 (Q4 2020) के साथ, SHA-256 समर्थन के हालिया जोड़ को प्रलेखन में प्रयोगात्मक के रूप में चिह्नित किया गया है।

मार्टिन (gren ( ) द्वारा प्रतिबद्ध ff233d8 (16 अगस्त 2020) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध d1ff741 , 24 अगस्त 2020)none
gitster

Documentation: --object-format=sha256प्रयोगात्मक के रूप में चिह्नित करें

साइन-ऑफ-बाय: मार्टिन engren

Eff45daab8 के बाद (" repository: डिफ़ॉल्ट रूप से SHA-256 समर्थन सक्षम करें", 2020-07-29, Git v2.29.0 - बैच # 6 में सूचीबद्ध मर्ज ), Git के वेनिला बिल्ड उपयोगकर्ता को चलाने में सक्षम बनाते हैं, जैसे, उदा।

git init --object-format=sha256  

और दूर हैक।
यह SHA-256 दुनिया के साथ अनुभव प्राप्त करने का एक अच्छा तरीका हो सकता है, उदाहरण के लिए, बग को खोजने के लिए

GIT_TEST_DEFAULT_HASH=sha256 make test  

हाजिर नहीं होता।

लेकिन यह वास्तव में एक अलग दुनिया है: इस तरह के SHA-256 रेपो SHA-1 रिपोज के सेट (अब तक काफी बड़े) से पूरी तरह से अलग रहेंगे।
सीमा पार से बातचीत करना सिद्धांत रूप में संभव है, उदाहरण के लिए, " diff+ apply" (या " format-patch+ am") के माध्यम से, लेकिन यहां तक ​​कि इसकी सीमाएं भी हैं: SHA-1 रेपो-भिन्न में SHA-1 रेपो लागू करना साधारण मामले में काम करता है, लेकिन यदि आप -3आपको सहारा देने की जरूरत है , आप भाग्य से बाहर हैं।

इसी तरह, " push+ pull" को काम करना चाहिए, लेकिन आप वास्तव में दुनिया के बाकी हिस्सों से ऑफसेट करेंगे। जब तक आप अपनी रिपॉजिटरी को इनिशियलाइज़ कर लेते हैं, तब तक यह ठीक हो सकता है, और इसके बाद कई महीनों तक यह ठीक भी हो सकता है, लेकिन एक दिन ऐसा भी आ सकता है जब आप अपने [इनिट - सोबजेक्ट-फॉर्मेट = sha256 के उपयोग पर पछताना शुरू कर दें ](https://github.com/git/git/blob/ff233d8dda12657a90d378f2b403bc6c85838c59/Documentation/git-init.txt#L52)<sup>([man](https://git-scm.com/docs/git-init#Documentation/git-init.txt---object-formatltformatgt))</sup>और अपने आप को एक काफी गहरे छेद में खोदा।

वर्तमान में SHA-256 और कुछ मामलों (मिडएक्स और कमिट-ग्राफ) के संबंध में हमारे डेटा स्वरूपों और प्रोटोकॉल को दस्तावेज़ित करने के लिए उड़ान में विषय हैं, हम यह समायोजित करने पर विचार कर रहे हैं कि फ़ाइल प्रारूप किस ऑब्जेक्ट प्रारूप का उपयोग करने का संकेत देते हैं।

--object-formatहमारे दस्तावेज़ में कहीं भी उल्लेख किया गया है, आइए यह स्पष्ट करें कि "sha256" के साथ इसका प्रयोग प्रयोगात्मक है।
अगर हमें बाद में यह समझाने की जरूरत है कि हम 2020 में वापस उत्पन्न डेटा को क्यों नहीं संभाल सकते हैं, तो हम हमेशा इस पैराग्राफ को इंगित कर सकते हैं जिसे हम यहां जोड़ रहे हैं।

"शामिल ::" द्वारा - एक छोटे से ब्लर्ब को इंगेज करें, हमें पूरे डॉक्यूमेंटेशन के अनुरूप होने में सक्षम होना चाहिए और अंततः इस टेक्स्ट की गंभीरता को धीरे-धीरे कम करना चाहिए।
एक दिन, हम इसे चरणबद्ध शुरू करने के लिए भी उपयोग कर सकते हैं --object-format=sha1, लेकिन चलो खुद से आगे नहीं बढ़ें ...

वहाँ भी है extensions.objectFormat, लेकिन यह केवल तीन बार उल्लेख किया गया है। दो बार जहां हम इस नए अस्वीकरण को जोड़ रहे हैं और तीसरे स्थान पर हमारे पास पहले से ही "एडिट न करें" चेतावनी है। वहाँ से, रुचि रखने वाले पाठकों को अंततः इस नए को ढूंढना चाहिए जिसे हम यहां जोड़ रहे हैं।

क्योंकि GIT_DEFAULT_HASHइस कार्यक्षमता के लिए एक और प्रवेश बिंदु प्रदान करता है, इसका प्रायोगिक स्वरूप भी दस्तावेज़ करें।

gitअब इसके मैन पेज में शामिल हैं :

के बजाय प्रयोग किया जाता है। डिफ़ॉल्ट "sha1" है। इस संस्करण का विस्तार है! देखें --object-formatमें git init

object-format-disclaimerअब इसके मैन पेज में शामिल हैं :

यह विकल्प प्रायोगिक है!
SHA-256 समर्थन प्रायोगिक है और अभी भी प्रारंभिक अवस्था में है।

एक SHA-256 रिपॉजिटरी सामान्य रूप से "नियमित" SHA-1 रिपॉजिटरी के साथ काम साझा करने में सक्षम नहीं होगी।
यह माना जाना चाहिए कि, उदाहरण के लिए, SHA-256 रिपॉजिटरी के संबंध में Git आंतरिक फ़ाइल स्वरूप पीछे-असंगत तरीकों से बदल सकते हैं।
केवल --object-format=sha256परीक्षण प्रयोजनों के लिए उपयोग करें ।


वही Git 2.29 (Q4 2020) सुनिश्चित करें कि " git clone" ( आदमी ) SHA-1 रिपॉजिटरी से एक क्लोन काम करेगा, जबकि GIT_DEFAULT_HASHपहले ही SHA-256 का उपयोग करने के लिए सेट है।
2.29 से पहले, इसके परिणामस्वरूप एक अनुपयोगी भंडार था जो आधा दावा SHA-1 वस्तुओं और refs के साथ SHA-256 रिपॉजिटरी होने का था।
इसे ठीक कर लिया गया है।

ब्रायन एम द्वारा 47ac970 (20 सितंबर 2020) प्रतिबद्ध देखें । कार्लसन ( bk2204)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध b28919c , 29 सितं, 2020)

builtin/clone: के साथ विफलता से बचें GIT_DEFAULT_HASH

रिपोर्ट-बाय: मैथ्यूस तवारेस
साइन-ऑफ-बाय: ब्रायन एम। कार्लसन

यदि कोई उपयोगकर्ता SHA-1 रिपॉजिटरी GIT_DEFAULT_HASHको " sha256" सेट करने के लिए क्लोन कर रहा है, तो हम एक रिपॉजिटरी के साथ समाप्त हो सकते हैं जहां रिपॉजिटरी प्रारूप संस्करण 0 है, लेकिन extensions.objectformatकुंजी " sha256" पर सेट है ।
यह दोनों गलत है (उपयोगकर्ता के पास SHA-1 रिपॉजिटरी है) और नॉनफंक्शनल (क्योंकि एक्सटेंशन का उपयोग v0 रिपॉजिटरी में नहीं किया जा सकता है)।

ऐसा इसलिए होता है क्योंकि एक क्लोन में, हम शुरू में रिपॉजिटरी सेट करते हैं, और फिर इसके एल्गोरिथ्म को इस आधार पर बदलते हैं कि रिमोट साइड हमें बताता है कि यह उपयोग कर रहा है।
हमने शुरू में इस मामले में SHA-256 के रूप में रिपॉजिटरी की स्थापना की है, और फिर बाद में एक्सटेंशन को साफ किए बिना रिपॉजिटरी संस्करण को रीसेट कर दिया है।

हम हमेशा इस मामले में एक्सटेंशन सेट कर सकते हैं, लेकिन इसका मतलब यह होगा कि हमारे SHA-1 रिपॉजिटरी पुराने Git संस्करणों के साथ संगत नहीं थे, भले ही कोई कारण नहीं हो कि वे क्यों न हों।
और हम भी प्रारंभिक रूप से SHA-1 के रूप में भंडार को शुरू नहीं करना चाहते हैं, इसका मतलब है कि अगर हम खाली भंडार का क्लोन बना रहे हैं, तो हम GIT_DEFAULT_HASHचर का सम्मान करने में विफल रहे हैं और SHA-1 भंडार के साथ समाप्त हो जाएंगे, नहीं एक SHA-256 रिपॉजिटरी।

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

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