2012-08-08 11 views
9

मेरे पास मास्टर/हेड से शाखा फू है। मैं मास्टर/हेड को जोड़ना चाहता था और इन बदलावों को शाखा फू पर उठाया था।प्रतिबद्ध करने के लिए कैसे प्रतिबद्ध करें - एक शाखा का आधार है जो एक शाखा का आधार है

git checkout master 
git add ... 
git commit --amend 
git checkout foo 
git rebase master 

समस्या थी पुराने गैर संशोधन करने में संशोधन के बाद शाखा foo के हिस्से के रूप में दिखाई देता है, और यह मास्टर पर रिबेस किया गया: मैं निम्नलिखित किया था। मैंने एक गिट रिबेस-आई किया और पुरानी प्रतिबद्धता को हटा दिया और यह काम किया, लेकिन क्या शाखा के आधार पर प्रतिबद्धता को संशोधित करने का एक आसान/सुरक्षित तरीका है? और हाँ, यह .. सभी स्थानीय प्रतिबद्ध है कि धक्का दिया नहीं किया गया है है

उत्तर

11

आपको बस इतना करना की जरूरत है, जहां से रिबेस शुरू करने के लिए Git बताने के लिए था: आप इस

git rebase --onto master SOMESHA foo 

कर सकते हैं कहाँ SOMESHA है पुराना मास्टर एसएचए। यही कारण है कि अपने पेड़ अब इस

* aaaaaa - (master) 
| * bbbbbb - (foo) 
| * cccccc - (old master) 
|/ 
* ffffff 

तरह लग रहा है और अगर आप कर

git rebase --onto master cccccc foo 

आपका पेड़ तो इस तरह दिखेगा, तो है।

* dddddd - (foo) 
| 
* aaaaaa - (master) 
| 
* ffffff 

तरफ: हम cccccc लिए अलग अलग नाम का उपयोग कर सकते प्रतिबद्ध यदि आप SHA मानों का उपयोग पसंद नहीं।

> git reflog master 

aaaaaa [email protected]{0}: reset: moving to something 
cccccc [email protected]{1}: commit: change the froozle 
ffffff [email protected]{2}: commit: snarf the froozle 

इसका मतलब यह है कि हम cccccc रूप [email protected]{1} (उर्फ, मास्टर के पिछले स्थान)

तो हम इस के रूप में

git rebase --onto master [email protected]{1} foo 

rebase का एक और विवरण के लिए प्रतिबद्ध ccccccfoo^ है लिख सकता है संदर्भित कर सकते हैं (AKA, foornt foo के लिए प्रतिबद्ध है), इसलिए हम इसे

git rebase --onto master foo^ foo 
012 के रूप में भी लिख सकते हैं

वे सभी एक ही चीज़ करते हैं, और आप अलग-अलग स्थितियों में अलग-अलग लोगों का उपयोग करना पसंद कर सकते हैं। मुझे आम तौर पर उपयोग करने के लिए एसएचए सरल लगता है, क्योंकि इस तरह के ऑपरेशन करने से पहले मैं अक्सर अपने भंडार का एक ग्राफ खींचता हूं।

+0

धन्यवाद, यह काम करता है – Aaron

+0

प्रतिबद्धता एसएचए के बजाय आप 'मास्टर @ {1} 'का भी उपयोग कर सकते हैं। – chbaker0

+0

@ chbaker0 आप बिल्कुल सही हैं - मैंने शुरू में सोचा था कि आप कुछ अलग सुझाव दे रहे थे। मैं उस व्याख्या को एक व्याख्या के साथ उत्तर में जोड़ रहा हूं। –

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