2012-09-18 7 views
68

मैं एक नया commit कैसे बना सकता हूं और फ़ाइलों में कोई बदलाव नहीं किए जाने पर एक नया संदेश बना सकता हूं?कोई बदलाव और नया संदेश कैसे प्रतिबद्ध करें?

क्या यह संभव नहीं है क्योंकि प्रतिबद्धता कोड (SHA?) समान होगा?

+0

कोड खुद के लिए की तुलना में नोट्स के लिए अधिक से प्रतिबद्ध के साथ करते हैं। –

+1

जो भी आप पूछ रहे हैं उसे करने के बजाय, इसके बजाय 'गिट नोट्स' का उपयोग करें। – wjl

+2

@iight अगर आपने कहीं भी अपना कोड नहीं धक्का दिया है, तो 'गिट प्रतिबद्ध --amend' पर भी विचार करें। यह आपको वापस प्रतिबद्ध स्क्रीन पर ले जाएगा जहां आप अपना संदेश संपादित कर सकते हैं, और यदि आपने उन्हें मंचित किया है तो प्रतिबद्ध में अतिरिक्त फ़ाइलें जोड़ें। ध्यान रखें कि, एक रिबेस की तरह, इससे आपकी मूल प्रतिबद्धता अप्रचलित हो जाएगी और इससे आपकी पुरानी प्रतिबद्धता को समाप्त करने वाले किसी भी व्यक्ति के लिए एक बुरा विलय सिरदर्द हो सकता है। –

उत्तर

91

ऐसा करने का शायद ही कोई अच्छा कारण है, लेकिन खाली संदेश के लिए --allow-empty-message के विपरीत, पैरामीटर --allow-empty खाली है। आप git help commit टाइप करके या the online documentation पर जाकर और भी पढ़ सकते हैं।

जबकि पेड़ ऑब्जेक्ट (जिसमें स्वयं का हैश है) समान होगा, प्रतिबद्धता वास्तव में एक अलग हैश होगा, क्योंकि संभवतः यह एक अलग टाइमस्टैम्प और संदेश होगा, और निश्चित रूप से एक अलग माता-पिता प्रतिबद्ध होगा। उन तीनों कारकों को git के ऑब्जेक्ट हैश एल्गोरिदम में एकीकृत किया गया है।


वहाँ कुछ कारणों से कर रहे हैं आप एक खाली प्रतिबद्ध (टिप्पणियों में से कुछ को शामिल) चाहते हो सकता है: (DavidNeiss के माध्यम से) कथन या दस्तावेज जोड़ने के लिए

  • के रूप में एक "कथात्मक प्रतिबद्ध", परीक्षण या लिंट पास करने के बारे में तथ्य के बाद (Robert Balicki के माध्यम से)।
  • मनमाने ढंग से परिवर्तन उत्पन्न किए बिना git आदेशों का परीक्षण करने के लिए (Vaelus के माध्यम से)।
  • gitolite (Tatsh के माध्यम से) हटाए गए एक नंगे भंडार को फिर से बनाने के लिए।
  • मनमाने ढंग से एक नई प्रतिबद्धता बनाने के लिए, जैसे बिल्ड टूलींग (mattLummus के माध्यम से) या व्यक्तिगत लॉगिंग या मीट्रिक के लिए (BlueJ774 के माध्यम से) के लिए। हालांकि, दो बार सोचें: आपकी शाखा/मर्ज संरचना के आधार पर, काम बहुत लंबे समय तक जी सकते हैं, इसलिए "बस कुछ भी नहीं करें" रणनीति अनजाने में अस्थायी वर्कफ़्लो कलाकृतियों के साथ आपकी टीम के भंडार को प्रदूषित कर सकती है और कोड संशोधन को अलग करना मुश्किल बनाती है क्षणिक क्रूर एक प्रतिबद्ध पेड़ से मेटाडाटा को जोड़ने के लिए

अन्य रणनीतियों में शामिल हैं:

  • अलग शाखाओं या हल्के टैग कि हमेशा एक को इंगित किसी खास स्थिति के लिए प्रतिबद्ध (जैसे "पिछले स्वीकार किए जाते हैं के लिए प्रतिबद्ध" या "वर्तमान मचान के लिए प्रतिबद्ध ")।
  • Annotated Tags टाइमस्टैम्प, कमिटर और संदेश रिकॉर्ड करने के तरीके के लिए, प्रतिबद्ध पेड़ में प्रवेश जोड़ने के बिना मौजूदा प्रतिबद्धता को इंगित करने के लिए।
  • git notes एक मौजूदा अपरिवर्तनीय प्रतिबद्धता के शीर्ष पर एक परिवर्तनीय नोट को जोड़ने के लिए।
+1

मैंने गिट प्रवाह [शाखा मॉडल] (http://nvie.com/posts/a-sccessful-git-branching-model/) का पालन करना शुरू कर दिया है। जब आप 'देव' शाखा फॉर्म 'मास्टर' बनाते हैं और फिर 'देव' से तत्काल 'feat' शाखा बनाते हैं, तो' feat' शाखा 'मास्टर' शाखा से आती है क्योंकि 'देव' पर कोई विशिष्ट प्रतिबद्धता नहीं होती है शाखा जो 'feat' शाखा से आता है। जब आप पहली बार 'देव' शाखा बनाते हैं तो एक खाली प्रतिबद्धता 'देव' शाखा को 'मास्टर' से स्वतंत्र अपनी अनिश्चित काल तक चलने वाली शाखा के रूप में स्थापित करने में मदद करती है। आम तौर पर जब आप परतों के रूप में शाखाओं का उपयोग करते हैं, और एक ही प्रतिबद्धता से दो परतें बनाते हैं तो –

+0

एक और कारण: यदि आप धक्का देने से पहले अपने प्रतिबद्ध संदेश से कुछ महत्व छोड़ देते हैं, तो आप रिमोट नहीं करते हैं तो आप 'प्रतिबद्ध - कमांड' नहीं कर सकते बल धक्का देने की अनुमति दें। इस तरह आप डेवलपर्स को पिछले प्रतिबद्धता के साथ एक महत्वपूर्ण संदेश देखने की अनुमति दे सकते हैं। –

+0

मैं ऐसा करना चाहता हूं क्योंकि मैंने एक प्रतिबद्धता को धक्का दिया, लेकिन प्रतिबद्ध संदेश में कुछ उल्लेख करना भूल गया। हमारे प्रतिबद्ध संदेश मुद्दे ट्रैकिंग और निरंतर एकीकरण सॉफ्टवेयर के साथ एकीकृत होते हैं और प्रतिबद्ध संदेश की सामग्री उन अनुप्रयोगों को प्रभावित करती है। क्या कोई बेहतर तरीका है? यह मेरे मामले में सबसे अच्छा समाधान की तरह लगता है। एकमात्र चीज जिसे मैं कल्पना कर सकता हूं वह किसी भी तरह पिछली प्रतिबद्धता को वापस करने में सक्षम होगा। – sytech

19

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

git commit --allow-empty 
2

हो सकता है कि एक और अधिक समझदार विकल्प के रूप में, आप एक एनोटेट टैग (एक नाम के एक संदेश के साथ प्रतिबद्ध) बना सकते हैं। git tag -a विकल्प देखें।

0

यदि आप gitversion जैसे सिस्टम का उपयोग कर रहे हैं, तो इस तरह की प्रतिबद्धता करने के लिए यह बहुत समझदारी है। आपके पास एक प्रतिबद्धता हो सकती है जो विशेष रूप से एक + सेमेवर का उपयोग करके प्रमुख संस्करण को बंप करने के लिए है: प्रमुख टिप्पणी।

4

खाली संदेश

git commit --allow-empty -m "Empty test commit" 

खाली एक खाली संदेश

git commit --allow-empty --allow-empty-message 
संबंधित मुद्दे