2013-08-06 5 views
6

पर स्विच करने की आवश्यकता है मैं शाखा पर काम कर रहा हूं और सुविधा/कार्य नहीं किया गया है। फिर मुझे त्वरित फिक्स के लिए बी पर दूसरी शाखा में स्विच करने की आवश्यकता है। जब मैं दूसरी शाखा पर स्विच करने की कोशिश करता हूं तो गिट मुझे अपने स्थानीय परिवर्तनों को बचाने के लिए मजबूर करता है अन्यथा मैं अपने सभी स्थानीय परिवर्तन खो दूंगा।स्थानीय शाखा पर, परिवर्तन नहीं करना चाहते हैं, लेकिन दूसरी शाखा

मुझे अपना अपूर्ण कोड करने की आवश्यकता है। क्या कोई तरीका है कि मैं बिना किसी कोड को छोड़कर खोने के कई शाखाओं के बीच स्विच कर सकता हूं? या स्थिति को संभालने का एक बेहतर तरीका है?

+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/6800778/saving-git-changes-temporarily) –

उत्तर

9

mipadi demonstrates के रूप में एक विकल्प, बस git stash का उपयोग करना है। होगा

# While working on "feature" branch, 
# you suddenly need to go work on a hotfix: 
$ git commit --all --message "Backup my feature work" 
$ git checkout -b hotfix master 

# You did your hotfix, and are ready to go back to feature 
$ git checkout feature 
$ git reset head^ 

git reset head^:

एक अन्य विकल्प बस सिर्फ प्रगति में अपने वर्तमान काम प्रतिबद्ध करने के लिए, शाखाओं स्विच, और फिर जब आप वापस स्विच करने के लिए तैयार कर रहे हैं, अपने पिछले करने के लिए वापस एक मिश्रित रीसेट करने के लिए प्रतिबद्ध है बैकअप प्रतिबद्ध करने से पहले एक मिश्रित रीसेट को प्रतिबद्ध करने के लिए वापस करें, और आपके बैकअप प्रतिबद्धता में किए गए सभी परिवर्तन आपकी कार्यशील प्रतिलिपि में बहाल किए जाएंगे। official Linux Kernel documentation for git reset (जोर मेरा) से:

पुनः निर्धारित करता सूचकांक नहीं बल्कि काम कर पेड़ (अर्थात, बदली हुई फ़ाइलें संरक्षित कर रहे हैं लेकिन चिह्नित नहीं करने के लिए प्रतिबद्ध) और रिपोर्ट क्या अद्यतन नहीं किया गया। यह डिफ़ॉल्ट कार्रवाई है।

की [सहेजा जा रहा है Git अस्थायी रूप से बदल जाता है]
+0

+1 मैं इसकी भी सिफारिश करता हूं क्योंकि 'गिट स्टैश' किसी भी शाखा से असंबंधित नहीं है। 'गिट प्रतिबद्ध-ए-एम" छेड़छाड़ करना आपके काम के संदर्भ को रखता है। यह स्वीकार्य उत्तर होना चाहिए। – eckes

+0

स्टैशिंग किसी शाखा से संबंधित नहीं हो सकता है, लेकिन वर्तमान हेड प्रतिबद्धता के आधार पर _is_। 'गिट शो-स्टेश' स्टैश प्रतिबद्धता को दो माता-पिता के विलय के रूप में दिखाता है, जिसमें से पहला हेड स्टैश पर आधारित है।और बिना दिए गए संदेश के 'गिट स्टैश [सेव]' डिफ़ॉल्ट रूप से शाखा का नाम रिकॉर्ड करता है। – musiphil

+0

मैं किसी भी अस्थायी के लिए छेड़छाड़ करना पसंद करता हूं क्योंकि केवल एक 'गिट स्टेश' कमांड इंडेक्स और काम करने वाले पेड़ दोनों की स्थिति को स्टोर कर सकता है। प्रतिबद्धता उस काम करने वाले पेड़ में बदलावों को कैप्चर नहीं करती है जो इंडेक्स में नहीं है। – musiphil

8

आप git stash का उपयोग कर सकते हैं, जो प्रतिबद्धता के बिना आपके परिवर्तनों को बचाएगा।

पहले, छिपाया अपने परिवर्तन:

$ git stash 

फिर अपने अन्य शाखा करने के लिए स्विच:

$ git checkout branch-B 

जब आप पढ़ रहे हैं, अपने मूल शाखा में वापस जाएं और अपने परिवर्तन unstash :

$ git checkout branch-A 
$ git stash pop 

दस्तावेज़ीकरण लिंक देखें अतिरिक्त उपयोग मामलों पर अधिक जानकारी और विनिर्देशों के लिए ऊपर।


तकनीकी तौर पर यह एक प्रतिबद्ध बनाने करता है, लेकिन git stash कुछ जादू का उपयोग करता है, ताकि आप वास्तव में नहीं है देखने के लिए प्रतिबद्ध है, और Git के उपकरण इन छद्म प्रतिबद्ध के साथ ठीक से निपटने के लिए कैसे पता।

+0

ठीक है, क्या हुआ अगर जब मैं पर शाखा बी कुछ परिवर्तन किया है और उनके लिए प्रतिबद्ध, हमारी शाखा-ए परिवर्तन नहीं करेंगे? – Suleman

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