2012-01-27 6 views
6

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

git branch test 

लेकिन किसी भी फाइल मैं master में जोड़ने के लिए, मैं test में देख सकते हैं:

मैं शाखा बनाने के लिए इस आदेश का उपयोग किया जाता है। और test में जोड़ा गया कोई भी नई फ़ाइल, मैं master में देख सकता हूं। इससे कैसे बचें? मैंने शाखा बनाने के दौरान किसी भी --ट्रैक विकल्प का उपयोग नहीं किया।

+2

ऐसा बिल्कुल नहीं होना चाहिए। क्या आप थोड़ा और विस्तार कर सकते हैं कि आप अपनी प्रतिबद्धताओं और शाखा स्विचिंग कैसे कर रहे हैं? – Mat

+0

डिफ़ॉल्ट रूप से मैं मास्टर शाखा में हूं।मैंने कमांड का उपयोग करके एक नई शाखा बनाई: गिट शाखा परीक्षण फिर, नई शाखा में स्विच करें: गिट चेकआउट परीक्षण परीक्षण शाखा में एक नई फ़ाइल जोड़ें: git newfile मास्टर पर स्विच करें: गिट चेकआउट मास्टर फिर: गिट स्थिति और मुझे मास्टर में टेस्ट शाखा में जोड़ा गया नया फ़ाइल मिल गया है, मैं मास्टर में टेस्ट शाखा में नई फ़ाइल क्यों देखूं? मैं चाहता हूं कि यह केवल टेस्ट शाखा में दिखाई दे – user811433

+2

क्या आप स्विच करने से पहले अपने बदलाव करते हैं? – Mat

उत्तर

4

आपने जो पूछा है वह बिल्कुल ठीक है git branch test करता है (एक बिंदु जिसमें से दो इतिहास साझा नहीं किए जाते हैं)।

  • जब आप git add newfile, आप अनुक्रमणिका से जोड़ रहे हैं, लेकिन नहीं यह करने से या इसके साथ किसी भी शाखा को अद्यतन करने के सामग्री है: वहाँ हालांकि यहां भ्रम के दो स्तर है। जब आप एक नई शाखा की जांच करते हैं, तब तक जब तक कोई संघर्ष नहीं होता है, तो गिट इंडेक्स से उन परिवर्तनों को रीसेट नहीं करेगा। यह एक वांछनीय व्यवहार है, उदाहरण के लिए यदि आप किसी अन्य शाखा पर काम कर रहे हैं और किसी अन्य शाखा में असामान्य परिवर्तनों का केवल एक सबसेट लेना चाहते हैं। यदि आप git commit अपनी मूल शाखा पर इंडेक्स की स्थिति, तो जब आप टेस्ट शाखा में वापस जाते हैं तो इंडेक्स उन परिवर्तनों को बनाए रखेगा।

  • जब आप उन पेड़ों के बीच जाते हैं जिनमें नई फाइलें शामिल होती हैं या हटा दी जाती हैं, तो git checkout उन्हें फाइल सिस्टम से हटा नहीं देगा (यदि रीसेट ऑपरेशन है)। फिर जब आप शाखाएं स्विच करते हैं तो आप इन फ़ाइलों को "देख" सकते हैं, उदा। ls या git status के आउटपुट में - लेकिन वे "अनचाहे" हैं और गिट उनके साथ कुछ भी करने की कोशिश नहीं करेगा (उदाहरण के लिए, git commit -a, उदाहरण के लिए, इस फ़ाइल को एक नया पेड़ लिखने से पहले इंडेक्स में नहीं जोड़ा जाएगा)। इसके बारे में चिंता करने की कोई बात नहीं है, लेकिन यदि आप इसके बारे में ओसीडी हैं, तो आप उन्हें हटा सकते हैं (या git clean का उपयोग करें)।

+2

मेरे उत्तर से अधिक विस्तृत। +1। नोट, यह ओसीडी नहीं है। यह सीडीओ है, यानी ओसीडी की तरह लेकिन वर्णानुक्रम में। **जैसा कि इसे होना चाहिए**। (क्षमा करें, यह शुक्रवार है, विरोध नहीं कर सका) – VonC

2
git branch test 
git add . 
git checkout test 
git checkout master 

जब तक आप प्रतिबद्ध नहीं है, तब तक आप दोनों शाखाओं test और master में अपना काम कर पेड़ और अपने सूचकांक (जो संदर्भ देता है कि तुम क्या जोड़ लिया है) देखेंगे।

git checkout test 
git commit -m "files for test" 
git checkout master 

तो फिर तुम master में फाइल तुम सिर्फ test में प्रतिबद्ध है नहीं देख सकेंगे।
आप नई शाखा testmaster से स्वतंत्र, एक नई प्रतिबद्धता (नई सामग्री के साथ) रिकॉर्डिंग करेंगे।

14

मुझे लगता है कि तुम क्या चाहते थे:

git checkout --orphan somebranch 

यह कोई इतिहास जो भी साथ एक somebranch पैदा करेगा, आप जो फ़ाइलें आपको लगता है कि एक करना चाहते हैं जोड़ सकते हैं, और वे से 100% भिन्न हो सकती है आपकी पिछली शाखाएं

+0

* ओपी * क्या नहीं चाहता था, लेकिन इस सवाल को ढूंढने वाले अधिकांश लोग क्या करते हैं। – jpmc26

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