2009-10-28 16 views
6

मैंने git commit बनाया है लेकिन मैंने धक्का नहीं दिया है। और अब मैं एक नए बग फिक्स पर काम कर रहा हूं, जो पहले फाइल के रूप में एक ही फाइल को छूना नहीं चाहिए।मैं एक गिट प्रतिबद्ध को पहले के बिना कैसे दबा सकता हूं?

क्या यह मेरे लिए यह बग फिक्स और git push केवल यह प्रतिबद्धता संभव है?

+7

ऐसा लगता है कि आपने 50 से अधिक प्रश्न पूछे हैं लेकिन उनमें से केवल एक छोटे से अंश के जवाब स्वीकार किए हैं। कृपया उस उत्तर को चिह्नित करने के लिए "स्वीकार करें" फ़ंक्शन का उपयोग करने पर विचार करें जो आपके लिए सबसे उपयोगी था। –

उत्तर

7

किसी विशेष प्रतिबद्धता के लिए अग्रणी सभी प्रतिबद्धताएं उस नई प्रतिबद्धता को परिभाषित करती हैं।

है, यदि आप एक मास्टर → देव → बग सुधार के रूप में नीचे छवि में दिखाया गया है:

master → dev → bugfix http://img.skitch.com/20091029-tbffrg53q73mdipiwcr3g2ywuh.png

आप dev अकेले नहीं बल्कि अकेले धक्का कर सकते हैं bugfix, लेकिन bugfix की परिभाषा dev भी शामिल है, इसलिए dev बिना bugfix

हालांकि कोई अर्थ नहीं है, यदि आप एक सुविधा शाखा के रूप में इस बग सुधार बाहर का निर्माण, आप कुछ है कि और अधिक इस तरह देखा होगा:

feature branch http://img.skitch.com/20091029-t3w5qk3bhj3ftx1d9xnk32ibkb.png

तुम अब भी पूर्वव्यापी प्रभाव से ऐसा कर सकता है (origin/master से एक नई शाखा बनाने के लिए, परिवर्तन चेरी लेने, और फिर git reset --hard HEAD^ अपने विकास शाखा पर इसके बारे में बंद बग सुधार परिवर्तन प्राप्त करने के लिए)।

एक बार है कि पूरा है, तो आप आगे बंदरगाह कर सकते हैं अपने देव शाखा एक सरल git rebase master साथ है और यह इस तरह दिखना होगा:

new master http://img.skitch.com/20091029-1ts3enwsmsr29imcu7tyk75ett.png

अभ्यास में, एक शाखा से बग फिक्स शुरू कर इस तरह का कर देगा सामान्य रूप से चीज बहुत आसान है।

6

आप क्या कर सकते हैं पिछली प्रतिबद्धता को एक (अस्थायी) शाखा में ले जाएं, और चेरी-मास्टर को अपनी नई प्रतिबद्धता चुनें। उदाहरण के लिए:

# first commit your current work 
git branch temp_branch 
git reset --hard HEAD~2 
git cherry-pick temp_branch 
git push 

फिर, temp_branch में आपके नए काम दोनों होंगे। फिर आप बाद में मास्टर करने के लिए वापस अपने पिछले एक चुन सकते हैं:

git cherry-pick temp_branch^ 
git branch -D temp_branch 

यह करने के बाद, अपने गुरु शाखा एक ही दो प्रतिबद्ध शामिल होंगे के रूप में आप के साथ शुरू किया, लेकिन विपरीत क्रम में।

0

बस एक और क्लोन करें और वहां से अपना बग फिक्स दबाएं।

+0

दोस्त का कठोर, क्या वह नहीं है? – btelles

0

हमारी दुकान व्यक्तिगत शाखाओं का व्यापक रूप से उपयोग करती है। मूल रूप से प्रक्रिया कुछ इस तरह होगा:

यह देखते हुए कि आप गुरु शाखा पर वर्तमान में

git checkout -b bug_fix_name_that_I_dont_want_to_commit 

ऊपर एक शाखा है और यह चेक बनाता है ... यह है जहाँ आप करता है कि आप कर रहे हैं डाल धक्का देने के लिए तैयार नहीं है।

अब आप मास्टर शाखा को प्रभावित किए बिना मौजूदा शाखा में काम करने में सक्षम होना चाहिए।

जब आप प्रकाशित करने के लिए तैयार हैं/धक्का है कि एक प्रतिबद्ध, बस कार्य करें:

git push origin master 

और अपने अन्य प्रतिबद्ध मूल भंडार करने के लिए नहीं जाना होगा।

जब आप मास्टर शाखा में "बग फिक्स" को शामिल करने के लिए तैयार होते हैं, तो मास्टर शाखा चेकआउट करें और करें;

git merge bug_fix_name_that_I_dont_want_to_commit 

मुझे लगता है कि यह सवाल का जवाब है, लेकिन यदि नहीं, तो बस मुझे बताएं!

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