2015-02-16 8 views
20

पर प्रतिबद्धता तिथि बदलें क्या मेरी प्रतिबद्धता से लेखक की तारीख में प्रतिबद्धता तिथि बदलना संभव है?जीआईटी: लेखक की तिथि

मैंने कुछ काम किया है और अब तिथियां समान हैं। मैं इसे पुरानी तिथियों (या लेखक तिथियों) पर वापस सेट करना चाहता हूं। क्या यह संभव है?

मैं सॉर्सेट्री का उपयोग कर रहा हूं इसलिए मेरे पास गिट कमांड लाइन है लेकिन मैं उस पर समर्थक नहीं हूं। मेरा बाहरी भंडार बिटबकेट है।

+1

http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git को संबंधित? – Martin

+0

हाँ लेकिन मैंने वास्तव में नई तिथियों को धक्का दिया। – kevingoos

+1

लेकिन नई प्रतिबद्ध तिथियां वास्तविकता को दर्शाती हैं। आप सच छिपाना क्यों चाहते हैं? –

उत्तर

16

चूंकि गिट 1.6.3 git rebase इस उद्देश्य के लिए --committer-date-is-author-date है।

git rebase --committer-date-is-author-date 

मूल जवाब: (: लेकिन देखना "संपादित करें 2" के नीचे स्थित संपादन)
स्थापित करने के लिए committer दिनांकों कोई आसान तरीका नहीं है। लेखक तारीखों को समायोजित करना आसान है (प्रतिबद्ध समय पर) --date आपको प्रत्येक के रूप में निर्दिष्ट करने देगा।

पर्यावरण परिवर्तनीय GIT_COMMITTER_DATE का उपयोग आपके द्वारा प्रतिबद्ध किए जाने पर एक अलग समय टिकट को मजबूर करने के लिए किया जा सकता है। नोट, हालांकि, आपको "रीप्ले" प्रत्येक प्रतिबद्धता के लिए इसे समायोजित करने की आवश्यकता होगी। परिणामी नई प्रतिबद्धता के पास एक अलग SHA-1 होगा (क्योंकि आपने इसमें कुछ बिट्स बदल दिए हैं, अर्थात्, कमिटर डेट फ़ील्ड), जिसका अर्थ है कि आपको अपने सभी वंशजों को फिर से करना होगा।

यह git filter-branch करता है (पुराने, एसएचए -1 आईडी से मैपिंग को नए SHA-1 आईडी में मैपिंग रखने और अन्यथा माता-पिता को समायोजित करने के साथ-साथ कुछ, कई, या सभी के साथ किए गए परिवर्तनों को फिर से बनाते हैं) - प्रतिलिपि बनाई गई प्रतियां ताकि नए SHA-1 आईडी का "नया" डीएजी हर संभव तरीके से "पुराना" डीएजी से मेल खाता हो, यानि, SHA-1 आईडी को छोड़कर और आपके फ़िल्टर द्वारा किए गए किसी अन्य परिवर्तन को छोड़कर हर तरह से)।

दूसरे शब्दों में, ऐसा करने के लिए, आपको इतिहास को फिर से लिखने के लिए git filter-branch का उपयोग करना होगा, इसका अर्थ यह है कि इसका अर्थ है। [संपादित करें: आप सचमुच यह git filter-branch बिना कर सकते हैं, जैसे, git rebase -i बजाय में यह करने से, लेकिन प्रभाव ही है।]

संपादित 2: के रूप में EIS एक टिप्पणी में बताया गया है (के बाद से हटा दिए गए), git rebase है इस उद्देश्य के लिए --committer-date-is-author-date। यह अभी भी वही इतिहास पुनर्लेखन करता है, लेकिन यह कच्चे git filter-branch कमांड के साथ ऐसा करने से कहीं अधिक सुविधाजनक है।

29
git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' 
+0

यह स्वीकार्य उत्तर होना चाहिए। @ torek का जवाब जानना अच्छा है, यद्यपि। –