2012-04-04 16 views
19

पर विचार करें मैं करताGit स्क्वैश और बनाए रखने के पिछले प्रतिबद्ध का टाइमस्टैंप

... -- A -- B -- C 

अगर मैं git rebase -i का उपयोग एक में सभी तीन प्रतिबद्ध छुटकारा पाने के लिए, हम

pick A 
squash B 
squash C 

मैं हुई देख सकते हैं प्रतिबद्ध A है इसके मूल टाइमस्टैम्प। यह C (आखिरी एक) प्रतिबद्धता का टाइमस्टैम्प कैसे प्राप्त कर सकता है?

मैं क्या सोच सकता हूं git commit --amend --date=<new_time> है, लेकिन इस तरह स्क्वैश या रीफ्लॉग से पहले C प्रतिबद्धता के टाइमस्टैम्प को याद रखने की आवश्यकता है।

मुझे लगता है कि नवीनतम प्रतिबद्धता का टाइमस्टैम्प अधिक उचित है, क्योंकि यह दिखाता है कि जब मैंने वास्तव में काम में काम पूरा किया था।

धन्यवाद।

उत्तर

11

ऐसा करने का कोई छोटा रास्ता नहीं है, लेकिन कुछ विकल्प हैं। यहाँ एक है:

git commit --amend --date="$(git show -s --pretty=tformat:%ai <sha1-of-C>)" 

और एक और:

git commit --amend -c <sha1-of-C> 

बाद पीटना होगा अपने मौजूदा संदेश के लिए प्रतिबद्ध है, तो आप इसे फिर से लिखने करना होगा।

+0

आप 'tformat' का उपयोग क्यों करते हैं? –

+0

@ क्रेंडकिंग: इस मामले में इससे कोई फर्क नहीं पड़ता कि यह 'प्रारूप' या 'tformat' है क्योंकि' tformat' newline शैल के कमांड प्रतिस्थापन नियमों द्वारा छीन लिया गया है। हालांकि, 99% बार मैं अंतिम न्यूलाइन (या जो भी टर्मिनेटर है) चाहता हूं क्योंकि मैं आमतौर पर एक स्क्रिप्ट के साथ कस्टम लॉग आउटपुट पार्स कर रहा हूं। यह सुनिश्चित करने के लिए कि जब मैं मायने रखता हूं, तो मैं आदत से 'tformat' टाइप करता हूं, जब भी इससे कोई फर्क नहीं पड़ता तब भी मैं' tformat' का उपयोग करता हूं। –

3

git commit --amend --reset-author

+0

यह सी से टाइमस्टैम्प का उपयोग नहीं करता है, यह टाइमस्टैम्प के रूप में वर्तमान समय का उपयोग करता है। – Doug

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