तो, मेरे पास एक बहुत ही सरल उपयोग केस है; मैं उन सभी कामों को स्क्वैश करना चाहता हूं जिन्हें मेरी 'आज की कामकाजी' शाखा से मास्टर में वापस जाने की जरूरत है।मैं गिट में प्रतिबद्धता तिथि के साथ कैसे स्क्वैश करता हूं जो अतीत में नहीं है?
अब तक मैं git rebase -i
का उपयोग कर रहा हूं, लेकिन यह काफी सही काम नहीं करता है; अंतिम प्रतिबद्धता पर टाइमस्टैम्प सही नहीं है।
यहाँ ऐसा करने का एक उदाहरण है:
[work1] git checkout master
Switched to branch 'master'
[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.
[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug Wed Nov 7 10:12:42 2012 +0800 Updated TODO again
abb891c Doug Wed Nov 7 10:12:24 2012 +0800 Added more work
c5fd35c Doug Wed Nov 7 10:11:50 2012 +0800 Added more work
a98facd Doug Wed Nov 7 10:11:22 2012 +0800 Add work
b4465be Doug Tue Nov 6 21:38:53 2012 -0800 Updated TODO
403cea9 Doug Fri Jan 2 21:38:53 2009 -0800 Added todo
ठीक है, अब मैं इन पिछले चार प्रतिबद्ध में एक प्रतिबद्ध छुटकारा पाने के लिए चाहते हैं।
[work2] date
Wed 7 Nov 2012 10:39:39 WST
[work2] git rebase -i b4465be
pick a98facd Add work
squash c5fd35c Added more work
squash abb891c Added more work
squash 5ad95ff Updated TODO to reflect todays work
और परिणाम:
[work2] git log
commit 3f7f1d2eb4ef23c73dce95f718152c7d5683a926
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
Add work
Added more work
Added more work
Updated TODO to reflect todays work
commit b4465bee5b278214704edcfef3f6e222b5b52964
Author: Doug <[email protected]>
Date: Tue Nov 6 21:38:53 2012 -0800
Updated TODO
Dammit नहीं! यह जो मैं चाहता था। परिणामस्वरूप प्रतिबद्धता का टाइमस्टैम्प उस प्रतिबद्धता का टाइमस्टैम्प है जिसे हमने स्क्वैश किया है; जो मैं चाहता था वह वर्तमान समय होने की नई प्रतिबद्धता तिथि थी।
बस वास्तव में दिखाने के लिए मैं क्या बात कर रहा हूँ:
[work2] date
Wed 7 Nov 2012 10:39:39 WST
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
मैं चाहता हूँ जिसके परिणामस्वरूप, मर्ज समय से तारीख होने के लिए यानी प्रतिबद्ध। अब, प्रतिबद्धता का समय नहीं।
जहां तक मुझे पता है कि आप केवल पिछली प्रतिबद्धता में स्क्वैश कर सकते हैं, ऊपर की ओर एक नई प्रतिबद्धता में नहीं, लेकिन क्या ऐसा करने का कोई तरीका है?
सही समाधान प्रतीत होता है 1) मर्ज संदेश और सही प्रतिबद्ध दिनांक दिनांक के साथ एक नई प्रतिबद्धता बनाएं, 2) ??? < --- किसी भी तरह से स्क्वैश पिछले में काम करता है।
मैं यह कैसे कर सकता हूं?
यह कई कारणों में से एक है कि मैं स्क्वैशिंग का प्रशंसक नहीं हूं। एक –
भी। कमेंट तिथि और लेखक की तारीख के बीच एक अंतर है। आप जो कर रहे हैं उस पर निर्भर करता है। –
[गिट स्क्वैश का संभावित डुप्लिकेट और अंतिम प्रतिबद्धता का टाइमस्टैम्प संरक्षित करें] (https://stackoverflow.com/questions/10020641/git-squash-and-preserve-last-commits-timestamp) –