2010-03-19 9 views
11

मैं अपने स्थानीय काम के लिए गिट का उपयोग करता हूं (और इसे कभी भी प्यार करता हूं), और मैं this article में वर्णित एक वर्कफ़्लो का पालन करता हूं। तो मूल रूप से, जब एक नई सुविधा शुरू होती है, तो मैं इसके लिए एक शाखा बनाता हूं, सामान्य हैक के माध्यम से जाता हूं, फिर चक्र चलाता हूं, और जब मुझे लगता है कि मैं इसके साथ कर रहा हूं, तो मैं इसे git rebase --interactive master का उपयोग करके एक ही प्रतिबद्धता में स्क्वैश करता हूं, और मैं हमेशा संपादन लेख में उदाहरण की तरह लग रही कुछ में संदेशों के लिए प्रतिबद्ध की भीड़ खत्म, यहाँ reproduced:मैं गिट रीबेस - इंटरैक्टिव प्रतिबद्ध संदेशों के प्रारूप को कैसे अनुकूलित करूं?

[#3275] User Can Add A Comment To a Post 

* Adding Comment model, migrations, spec 
* Adding Comment controller, helper, spec 
* Adding Comment relationship with Post 
* Comment belongs to a User 
* Comment form on Post show page 
बेशक

, कि/प्रत्येक के सामने चिपकाने * संदेश प्रतिबद्ध # This is the xth commit message लाइनों और प्रतिलिपि को हटाने के एक झुंड के बाद है ।

अब, मैं क्या सोच रहा था, क्या गिट रिबेस-i squashed प्रतिबद्ध संदेशों को आउटपुट करने के लिए कोई तरीका है तो मुझे यह हैकिंग करने की ज़रूरत नहीं है?

(मैं, msysgit का उपयोग करें। यह है कि अगर मायने रखती है मेरे संपादक नोटपैड ++ है।)

धन्यवाद!

+1

आपको स्वीकार्य उत्तर बदलने पर विचार करना चाहिए, क्योंकि गिट ने अब – Joakim

+0

@ जोकिम के लिए समर्थन जोड़ा है जैसा कि नीचे चर्चा की गई है, गिट 2.6 सुविधा बिल्कुल ओपी से मेल नहीं खाती है, इसलिए जेफ्रोमी का जवाब खड़ा है। – VonC

उत्तर

4

स्क्वैश संदेश टेम्पलेट को संशोधित करने के लिए कोई रास्ता नहीं है (स्रोत को हैक करने से छोटा), मुझे नहीं लगता। हालांकि, अगर आप एक जोड़े विकल्प हैं:

  • शॉर्टलिस्ट पाने के लिए एक Git लॉग आदेश का उपयोग करें, `तरह Git लॉग --pretty =" *% s "कुछ प्रतिबद्ध-1..commit -2 आप प्राप्त करने के लिए आपकी गोलियां लिनक्स में यह आपके संपादक के भीतर से करना बहुत संभव है - यह नहीं पता कि यह msysgit के साथ कैसे काम करता है।

  • क्या आपका संपादक आपके लिए काम करता है! मुझे नहीं पता कि आपका संपादक क्या है, इसलिए मैं आपको वास्तव में नहीं बता सकता कि क्या करना है, लेकिन यह निश्चित रूप से विम में बहुत संभव होगा।

भी: (विचार किया जा रहा है /# This is the .* commit message/ के लिए खोज, एक जोड़ी पंक्तियों को हटा दें, एक रखने के लिए, अगली टिप्पणी करने के लिए हटाना), यह क्या आप इस मामले में चाहते हैं, शायद नहीं है, लेकिन की काफी हाल के संस्करणों में गिट, fixup पहचानकर्ता है जिसे आप स्क्वैश के बजाय उपयोग कर सकते हैं - यह वही काम करता है, लेकिन यह प्रतिबद्ध संदेश को त्याग देता है, इसलिए यदि आपके पास वास्तविक संदेश के साथ कोई प्रतिबद्धता है तो दस फिक्सेस, आप बस उन्हें सभी फ़िक्सअप चिह्नित कर सकते हैं और नहीं अपने फेंकने वाले संदेशों को हटाना होगा।

+0

मैं सहमत हूं। +1। फिक्सअप (और ऑटोस्क्वाशिंग) पर अधिक जानकारी के लिए, http://stackoverflow.com/questions/2302736/trimming-git-checkins/2302947#2302947 – VonC

+0

कूल देखें! मुझे msysgit को अपडेट करना होगा और इस फिक्सअप और ऐसे शॉट को देना होगा। :) – adamjford

+0

मैंने अपने पाठ संपादन शेंगेनियों के लिए विम का उपयोग करना शुरू कर दिया है, इसलिए मुझे लगता है कि मैं दरवाजा # 2 के साथ जा रहा हूं! – adamjford

0

जब आप चाहें तो आप एक -मेन्ड बना सकते हैं। आप पिछली प्रतिबद्धता में चेकआउट कर सकते हैं, जिसे आप बदलना चाहते हैं और इसे संशोधित करना चाहते हैं।

+0

यूप, और मैं काफी थोड़ी देर का उपयोग करता हूं क्योंकि मेरे पास वसा उंगलियां हैं, जाहिर है। :) लेकिन मुझे परिणामस्वरूप प्रतिबद्ध संदेश को संपादित करने के लिए मेरे squashed प्रतिबद्धताओं को कम करने की आवश्यकता नहीं है; मैं इसे टेक्स्ट एडिटर में प्रारूपित करता हूं जो प्रत्येक प्रतिबद्धता को पिक/एडिट/स्क्वैश असाइन करने के बाद पॉप अप करता है। मैंने इसके लिए अपने प्रश्न को स्पष्ट करने के लिए स्पष्ट किया। – adamjford

9

गिट 2.6+ (क्यू 3 2015) शुरू करना, वास्तव में गिट रिबेस -आई प्रतिबद्ध संदेश को कॉन्फ़िगर करने का एक तरीका होगा।

commit 16cf51c (13 जून 2015) Michael Rappazzo (rappazzo) द्वारा देखें।
(commit 9f56db7 में Junio C Hamano -- gitster -- द्वारा विलय, 03 अगस्त 2015)

git-rebase--interactive.sh: कस्टम अनुदेश प्रारूप

एक config विकल्प 'rebase.instructionFormat' डिफ़ॉल्ट ओवरराइड कर सकते हैं 'oneline' के प्रारूप के लिए config विकल्प जोड़ने पुनर्वित्त निर्देश सूची।

चूंकि सूची बाएं, दाएं या सीमा चिह्न के साथ पार्स किया गया है और sha1, वे निर्देश प्रारूप में प्रीपेड हैं। , git log में विनिर्दिष्ट एक इंटरैक्टिव रिबेस दौरान निर्देश सूची के लिए प्रयोग की जाने वाली,

rebase.instructionFormat 

एक प्रारूप स्ट्रिंग:

आप जल्द ही एक नया config होगा।
प्रारूप में स्वचालित रूप से लंबे प्रतिबद्ध प्रतिबद्ध हैश प्रारूप में प्रस्तुत किया जाएगा।

उदाहरण के लिए:

git config --add rebase.instructionFormat "[%an @ %ar] %s" 

ध्यान दें कि सुविधा के रिलीज के बाद एक बग/प्रतिगमन है:
देखें "Comment in rebase instruction has become too rigid"

मुझे लगता है कि प्रारूप पर ध्यान एक रिबेस निर्देशक शीट में टिप्पणी लाइनों की कठोर हो गई है - यह अब रिक्त स्थान या टैब से शुरू नहीं हो सकती है। टिप्पणी चार (उदाहरण के लिए "#") को पहले कॉलम पर दिखाना है।


Jefromi टिप्पणी below:

ऐसा लगता है यह केवल इंटरैक्टिव रिबेस भीतर प्रदर्शन को प्रभावित करने, जिसके परिणामस्वरूप संदेशों प्रतिबद्ध नहीं का मतलब है।

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

तो यह ओपी के लिए एकदम सही फिट नहीं है।

+0

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

+0

@ जेफ्रोमी अच्छा बिंदु। मैंने अधिक दृश्यता के उत्तर में आपकी टिप्पणी शामिल की है। और मैंने प्रश्न में एक टिप्पणी जोड़ दी है जिसमें कहा गया है कि आपका उत्तर अभी भी एक है। – VonC

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