जब मैं शाखाएं जोड़ूं (संशोधित, जोड़ी गई, हटाई गई फ़ाइलें) स्विच नहीं करूं तो git मेरे बदलाव क्यों दिखाता रहता है?


115

मैं वास्तव में गिट के लिए नया हूं और मैं यह समझने की कोशिश कर रहा हूं कि जब मैं एक शाखा में एक शाखा में परिवर्तन करता हूं तो git दिखाता रहता है जब मैं शाखाओं के बीच स्विच करने के लिए git चेकआउट चलाता हूं पहले मैंने git ऐड का उपयोग नहीं करने की कोशिश की और काम नहीं किया। हालाँकि, मैंने तब git ऐड का उपयोग करने की कोशिश की, लेकिन समस्या को ठीक नहीं किया। मैं अभी तक git कमिट का उपयोग नहीं कर रहा हूँ।

यह मूल रूप से मैं क्या कर रहा हूँ:

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  

मैंने सोचा था कि शाखाओं का उपयोग करते समय, आप एक शाखा में जो भी करते हैं, वह अन्य सभी शाखाओं के लिए अदृश्य है। क्या वह शाखाएँ बनाने का कारण नहीं है?

मैंने "गिट ऐड" का उपयोग करने की कोशिश की, लेकिन दोनों शाखाओं में परिवर्तन दिखाई दे रहे हैं। क्या मुझे इससे बचने के लिए शाखाओं के बीच स्विच करने से पहले "गिट कमिट" चलाने की आवश्यकता है?

जवाबों:


142

स्विचिंग शाखाएँ आपके साथ बिना परिवर्तन किए हुए परिवर्तन करती हैं। या तो पहले प्रतिबद्ध git checkout .करें, उन्हें पूर्ववत करने के लिए चलाएँ , या git stashस्विच करने से पहले चलाएं । (आप अपने परिवर्तनों को वापस पा सकते हैं git stash apply)


10
git stash pop तब तक बेहतर है जब तक आप बहुत बड़ी मात्रा में स्टैम्स का निर्माण नहीं करना चाहते।
सिराइड

7
@ जेपीजेड: गिट स्टैश केवल ट्रैक की गई फाइलों से संबंधित है; नई फ़ाइलों को ट्रैक नहीं किया गया है, इसलिए वे धराशायी नहीं होंगी।
सिराइड

2
@ जेपीजेड: क्या आपको अनकैप्ड फाइल्स को स्टैश करना चाहिए, स्टैशिंग git addकरने से पहले उन्हें करने की चीज है । उस ने कहा, मुझे यकीन नहीं है कि आप वास्तव में यहाँ संघर्ष करना चाहते हैं - यदि आप उन बदलावों का इरादा रखते हैं जो आप जिस शाखा से दूर जा रहे हैं, उसका हिस्सा बनने के लिए प्रतिबद्ध हैं। (यदि आप उस शाखा में वापस जाने का इरादा रखते हैं और उनमें बदलाव करने से पहले बदलावों पर काम करना चाहते हैं, तो stashयह नौकरी के लिए सही हो सकता है।)
कास्केबेल

16
"स्विचिंग शाखाएं आपके साथ असम्बद्ध परिवर्तनों को वहन करती हैं" - यह समझ में आता है और शायद सबसे खराब डिजाइन विचार। यदि आप अलग-थलग तरीके से काम नहीं कर सकते हैं, तो शाखाओं के होने का क्या मतलब है? !!!
नेहमे

1
मेरे मामले में, मेरे पास एक विकसित शाखा से एक सुविधा शाखा है। मैंने फीचर ब्रांच में कमिट किया, लेकिन जब मैं डेवलपमेंट ब्रांच को चेकआउट करता हूं तो यह बदलाव दिखाता है।
हितेश गर्ग

31

संक्षिप्त उत्तर: हां, आपको प्रतिबद्ध होने की आवश्यकता है। सुनिश्चित करें कि आप इसे सही शाखा पर करते हैं, हालांकि!

एक शाखा एक प्रतिबद्ध के लिए एक संकेतक है। जब आप किसी शाखा की जाँच करते हैं, तो शाखा उस नए वचन की ओर संकेत करती है। जब आप किसी शाखा की जाँच करते हैं, तो आप उस कमिट की जाँच करते हैं जो इसे इंगित करता है। (आप अपने काम के पेड़ के स्नैपशॉट के रूप में कमिट्स के बारे में सोच सकते हैं।)

इसलिए, यदि आपके पास ऐसे परिवर्तन हैं जो आपने नहीं किए हैं, तो वे शाखाओं को बदलकर अप्रभावित रहने वाले हैं। बेशक, अगर स्विचिंग शाखाएँ आपके परिवर्तनों के साथ असंगत हैं,git checkout तो बस इसे करने से इनकार कर देंगी।

git addपरिवर्तनों के मंचन के लिए एक आदेश है, जिसे आप तब प्रतिबद्ध करेंगे। यह रिपॉजिटरी के इतिहास में उन परिवर्तनों को दर्ज नहीं करता है। यह उन्हें एक मंचन क्षेत्र (सूचकांक) में रखता है; git commitफिर उस मंचन की सामग्री का उपयोग कमिट बनाने के लिए करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.