2008-10-29 11 views
42

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

उदाहरण के लिए: Git-निर्माण शाखा में

Git स्थिति:

# On branch git-build 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: cvsup_current 
# 

स्विच मास्टर शाखा में मास्टर शाखा में

[[email protected] builder_scripts (git-build)]# git co master 
M  builder_scripts/cvsup_current 
Switched to branch "master" 

Git स्थिति

[[email protected] builder_scripts (master)]# git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: cvsup_current 
# 

क्यों क्या वह फाइल को मास्टर शाखा में संशोधित के रूप में दिखाया गया है, भले ही इसे गिट-बिल्ड शाखा में संशोधित किया गया हो?

मेरी समझ यह थी कि शाखाएं एक-दूसरे से स्वतंत्र होती हैं और जब मैं एक शाखा से दूसरी शाखा में बदल जाता हूं तो परिवर्तन एक शाखा से दूसरे में "फैल नहीं" जाते हैं। तो मुझे स्पष्ट रूप से कुछ चीज़ याद आ रही है।

किसी को भी एक सुराग छड़ी मिली है?

उत्तर

12

यह गिट का डिफ़ॉल्ट व्यवहार है।

आप -f का उपयोग कर सकते हैं यदि आप चाहें तो "साफ चेकआउट" करने के लिए चेकआउट के लिए ध्वज।

+11

ध्यान रखें कि यह उस शाखा के शीर्ष पर परिवर्तन नहीं रखता है जिसे आप छोड़ रहे हैं या कुछ भी। यह असामान्य परिवर्तनों को फेंक देगा (सिवाय इसके कि फ़ाइल अनचाहे है)। – webmat

+6

यह बहुत ही दुर्लभ मामला है जहां आप 'गिट चेकआउट-एफ' का उपयोग करना चाहते हैं क्योंकि यह तत्काल, अपरिवर्तनीय रूप से और बिना किसी अपरिचित परिवर्तन को फेंकने के संकेत देगा। एक कारण गिट चेकआउट जिस तरह से करता है, मैं नीचे गैरेथ की टिप्पणी पढ़ने की सलाह देता हूं। –

9

संशोधित फ़ाइलों को रिपोजिटरी में तब तक नहीं रखा जाता है जब तक आप और उन्हें प्रतिबद्ध नहीं करते। यदि आप अपनी विषय शाखा में वापस स्विच करते हैं और फ़ाइल करते हैं, तो यह मास्टर शाखा पर दिखाई नहीं देगा।

58

क्यों यह फ़ाइल मास्टर शाखा में संशोधित के रूप में दिखाया गया है भले ही इसे गिट-बिल्ड शाखा में संशोधित किया गया हो?

याद करने के लिए महत्वपूर्ण है कि फाइल नहीं था Git-निर्माण शाखा में संशोधित है। यह केवल आपकी कामकाजी प्रति में संशोधित किया गया था।

केवल जब आप प्रतिबद्ध परिवर्तन जो भी शाखा तुम बाहर

+0

धन्यवाद, संयुक्त उत्तरों ने मेरे लिए यह बहुत स्पष्ट कर दिया है! –

+0

मुझे एहसास हुआ कि, एक एसवीएन मानसिकता से आ रहा है, एक शाखा में काम करना वास्तव में इसे आपके "एसवीएन" सर्वर पर नहीं कर रहा है, यह "इस शाखा में मेरे परिवर्तनों को सहेजना" है। मैं अभी भी समायोजित करने की कोशिश कर रहा हूँ। –

+4

"यह केवल आपकी कार्यशील प्रति में संशोधित किया गया था" <- नहीं, यह सूचकांक में भी संशोधित किया गया था, यानी परिवर्तन –

38

आप जब आप किसी अन्य पर काम करने के लिए बाहर जाने अस्थायी रूप से एक शाखा करने के लिए अपने स्टोर करना चाहते हैं जाँच कर ली है में वापस डाल दिया, आप git stash उपयोग कर सकते हैं आदेश। यह गिट का उपयोग करने के अद्भुत छोटे unsung भत्तों में से एक है। उदाहरण कार्यप्रवाह:

git stash #work saved 
git checkout master 
#edit files 
git commit 
git checkout git-build 
git stash apply #restore earlier work 

git stash भंडार परिवर्तन के ढेर है, तो आप सुरक्षित रूप से कई चौकियों स्टोर कर सकते हैं। आप उन्हें नाम/विवरण भी दे सकते हैं। पूर्ण उपयोग जानकारी here

+0

हालांकि यह सीधे भाग का जवाब नहीं देता है, लेकिन यह उत्तर ओपी क्या करने की कोशिश कर रहा था इसके इरादे से सबसे अच्छा फिट बैठता है। यही वह है जिसकी तलाश में मैं हूं –

1
  • यह Git शाखाओं एक दूसरे पर निर्भर हैं बल्कि वे एक पूरा कोड प्रत्येक शाखा के लिए अलग से आधार या तो नहीं है जैसा नहीं है।
  • प्रत्येक प्रतिबद्धता के लिए, गिट उस ऑब्जेक्ट को संग्रहीत करता है जिसमें परिवर्तनों के लिए पॉइंटर होता है। इसलिए प्रत्येक शाखा वर्तमान में आपके द्वारा बनाई गई शाखा में अपनी नवीनतम प्रतिबद्धता और HEAD बिंदुओं को इंगित करती है।
  • जब आप शाखा स्विच करते हैं, तो HEAD सूचक उस शाखा की विशेष प्रतिबद्धता को इंगित करता है। इसलिए यदि संशोधित फाइलें हैं, तो डिफ़ॉल्ट व्यवहार उन पर प्रतिलिपि बनाना है।

आप इस मुद्दे को दूर करने के लिए निम्न चीज़ें कर सकते हैं।

  1. परिवर्तनों को अनदेखा करने के लिए -f विकल्प का उपयोग करें।

आप परिवर्तनों को सहेजना चाहते हैं:

  1. उसी शाखा में स्थानीय स्तर पर परिवर्तन लें और उसके बाद शाखा स्विच करें।
  2. git stash का उपयोग करें, शाखा स्विच करें, अपना काम करें, मूल शाखा पर वापस स्विच करें और git stash apply करें।