2010-06-09 9 views
11

git tag करते समय, मैं याद रखने में हमेशा अच्छा नहीं हूं कि HEAD ~ 6 (उदाहरण के लिए) समावेशी या अनन्य है।क्या किसी संदेश का एसएचए प्राप्त करने का कोई तरीका है?

यह देखते हुए कि मेरे अधिकांश काम किसी समस्या संख्या से पहले से जुड़े हुए हैं, मुझे आश्चर्य हुआ कि क्या उसके संदेश के हिस्से से एसएचए को प्रतिबद्ध करने के लिए कुछ जादू आदेश है।

मैं जानता हूँ कि यह एक git log और वहाँ से काम करने के लिए आसान है, लेकिन मैं और अधिक आसान चाहते हैं :)

संपादित: In Git, is there a way to get the “friendly” name for an arbitrary commit?

उत्तर

17

आप :/blah वाक्यविन्यास का उपयोग उस प्रतिबद्धता को निर्दिष्ट करने के लिए कर सकते हैं जिसका वचन संदेश दिए गए पाठ से शुरू होता है।

उदा।

git show ":/Issue #299" 

यह मान्य है कहीं भी एक प्रतिबद्धता का उपयोग किया जा सकता है। जैसे

git cherry-pick ":/Issue #299" 

यदि आपको वास्तव में प्रतिबद्धता के SHA-1 की आवश्यकता है तो आप केवल रेड-पार्स का उपयोग कर सकते हैं।

git rev-parse ":/Issue #299" 

देखें "SPECIFYING REVISIONS" section of the git rev-parse man page:

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

+0

यदि पाठ गैर-अद्वितीय है तो क्या होता है? – Benjol

+0

@ बेंजोल: आईआईआरसी, यह सबसे छोटी पहुंच योग्य प्रतिबद्धता पाता है; आपको दस्तावेज़ीकरण की जांच करनी होगी। –

+0

धन्यवाद, यह देखने के लिए किसी कीवर्ड का कोई विचार है कि ': /' बहुत अच्छा काम नहीं करता है ... – Benjol

1

प्रयास करें: किसी भी विपरीत प्रश्न पूछा
git rev-list --grep='message excerpt' HEAD 

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

8
git log --grep=word 

प्रासंगिक प्रतिबद्धता खोजने में मदद करनी चाहिए।
,

तरह

git log --grep=word --pretty=oneline 
git log --grep=word --pretty=format:"%h" 

(पिछले एक केवल SHA1 दिखाते हैं) विभिन्न प्रारूप विकल्प जोड़ें (commit contents, जहां Git log -S (गैंती विकल्प) या git grep अधिक उपयुक्त हैं के लिए खोज करने के लिए विरोध के रूप में) और तुम तैयार हो।


भी देखें "Fun with git log --grep"

git log --grep=frotz --grep=nitfol --since=1.month 

यह करता है कि पिछले महीने के भीतर हुआ है और उनके लिए प्रतिबद्ध लॉग संदेशों में या तो frotz या nitfol उल्लेख पाता है।
सामान्य "गिट grep" के साथ, एक से अधिक पैटर्न देने का मतलब है "यह या वह"।

लेख बताते हैं कि git grep लाइन उन्मुख है, और इस git log --grep आदेश में --all-मिलान विकल्प का उपयोग कर रहा है।

जिस तरह से "git log" परिवार जीपीआर तंत्र का उपयोग करता है, ठीक है "क्या पूरी चीज एक मैच है?" पहलू, "मुझे उन मानदंडों से मेल खाने वाली रेखाएं दिखाएं" पहलू नहीं। यह तुम इतनी तरह इस तंत्र का उपयोग करने की अनुमति देता है:

यह करता है कि frotz उल्लेख और लीनुस द्वारा लिखित दिखाएगा।

+0

मैं कुछ ऐसा ढूंढ रहा था जिसे मैं पाइप/सीधे किसी अन्य कमांड में उपयोग कर सकता हूं, इसलिए यदि आप '--pretty = format: "% h" 'जोड़ते हैं, तो मैं आपको जवाब के रूप में चिह्नित करूंगा;) – Benjol

+0

कमांड में --pretty = ऑनलाइन जोड़ना पठनीयता को और भी बेहतर बनाना चाहिए। – Unknown

+0

@ बेंजोल: प्रारूप विकल्प जोड़े गए। – VonC

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

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