2012-10-10 12 views
6

विलीन हो जाती है मैं खोलGit चेकआउट स्वचालित रूप से स्थानीय संशोधन

git init 

echo "test1" > test1.txt 
git add test1.txt 
git commit -a -m "test1" 

echo "test2" >> test1.txt 

git branch test 
git checkout test 

text.txt पर निम्न कमांड की कोशिश की अब शामिल हैं:

test1 
test2 

चेकआउट के बाद test सभी स्थानीय संशोधनों शाखा से master विलय हो।

क्यों?

मुझे उम्मीद है कि git स्थानीय परिवर्तनों के कारण test पर चेकआउट से इंकार कर देता है। मुझे उम्मीद थी कि गिट एक प्रतिबद्धता या stash स्थानीय परिवर्तनों के लिए पूछता है।

संपादित करें: मैंने इस आदेश को निष्पादित करने के लिए एक बैश स्क्रिप्ट का उपयोग किया। मुझे निम्नलिखित आउटपुट मिलता है:

[email protected]:/tmp/test$ ./createrepo 
Initialized empty Git repository in /tmp/test/.git/ 
[master (root-commit) 0407f5b] test1 
1 file changed, 1 insertion(+) 
create mode 100644 test1.txt 
M  test1.txt 
Switched to branch 'test' 
+0

मेरे पास एक ही समस्या है, अजीब बात यह है कि कुछ रिपॉजिटरीज़ के लिए, मैं बिना काम किए चेकआउट नहीं कर सकता, दूसरों को विलय हो जाता है। मैंने कॉन्फ़िगरेशन में देखा है और कोई अंतर नहीं देख सकता। – jdborg

उत्तर

14

git संभवतः मूल्यवान डेटा खोने के लिए कड़ी मेहनत करता है। इस मामले में, यह वास्तव में शाखाओं में विलय नहीं कर रहा है, क्योंकि प्रश्न में परिवर्तन किए गए नहीं हैं। इसके बजाय, जब आप git checkout करते हैं, तो यह नव निर्मित लेकिन प्रतिबद्ध नहीं किए गए संशोधनों को संरक्षित करने का प्रयास करता है, इसलिए यह आपके द्वारा अनुरोधित प्रतिबद्धता की जांच करता है, और आपके अपरिचित परिवर्तन जोड़ता है। यदि आप वास्तव में असामान्य परिवर्तनों को त्यागना चाहते हैं, तो git checkout -f, या git checkout का उपयोग करें git reset --hard HEAD के बाद। कभी-कभी, यदि आपके द्वारा किए गए परिवर्तनों को अभी तक स्पष्ट रूप से जांचने में विलय नहीं किया जा सकता है, तो आपको एक त्रुटि संदेश मिलेगा और चेकआउट विफल हो जाएगा।

+1

मैं कुछ भी त्यागना नहीं चाहता हूं। लेकिन मुझे नहीं लगता कि अनचाहे परिवर्तन स्वचालित रूप से विलय हो जाएंगे। अगर मैं 'test' में कुछ करता हूं, तो कुछ असामान्य परिवर्तन करें और फिर से स्विच करने का प्रयास करें, गिट कहता है कि ऐसा नहीं हो सकता क्योंकि वास्तव में असामान्य परिवर्तन हैं। लेकिन अगर इस नई शाखा में कोई काम नहीं है तो गिट ऐसा क्यों नहीं करता है? क्योंकि 'मास्टर' शाखा और 'टेस्ट' के समान' हेड 'है? – Razer

+0

यदि आपने 'टेस्ट' में कुछ किया है, तो इस नई शाखा पर काम चल रहा है, इसलिए मुझे लगता है कि मैं आपके प्रश्न का पालन नहीं कर रहा हूं ... यदि, उपर्युक्त उदाहरण का पालन करते हुए, आपने' test2 'को अपने ' टेस्ट 'शाखा, फिर परीक्षण में अधिक संशोधन किए।txt' और पहले बिना काम किए 'मास्टर' पर वापस जाने का प्रयास किया, यह संभावना है कि असम्बद्ध परिवर्तनों को स्पष्ट रूप से कॉपी नहीं किया जा सकता है, इसलिए जब तक आप परिवर्तनों को त्यागें या 'गिट स्टेश' का उपयोग न करें तब तक 'चेकआउट' विफल हो जाएगी। – twalberg

+0

यहां भ्रम इस तथ्य में है कि ओपी सोचता है कि फ़ाइल में परीक्षण 2 लाइन होने पर परीक्षण तालिका में जांच करने का मतलब है कि वे विलय कर रहे हैं। यह सही नहीं है: उन परिवर्तनों को परीक्षण शाखा में विलय नहीं किया गया है, बल्कि कार्यशील निर्देशिका में संरक्षित है। दोनों शाखाओं में गिट diff और गिट स्थिति करने की कोशिश करें और आप देखेंगे कि मैं किस बारे में बात कर रहा हूं। –

0

क्या आपने गिट चेकआउट कमांड के साथ कोई विकल्प उपयोग किया है? मैं पूछता हूं क्योंकि जिस व्यवहार का आप वर्णन कर रहे हैं वह ऐसा लगता है जब "गिट चेकआउट-एफ" का उपयोग किया जाता है।

+0

नहीं, मैंने परीक्षण के लिए इस आदेश को बैश स्क्रिप्ट से कॉपी किया है। – Razer

0

git checkout स्थानीय रूप से बदली गई फ़ाइलों को प्रतिस्थापित करता है।

git mergeविलय स्थानीय & आने वाले परिवर्तन, किसी भी विवाद को सतर्क करते हुए।

न तो यदि ये आदेश स्थानीय फ़ाइलों को हटा देंगे जो आने वाली प्रतिबद्धता में मौजूद नहीं हैं।

केवल git reset --hard स्थानीय परिवर्तनों को पूरी तरह से मिटा देगा।

+0

मुझे पता है कि। लेकिन 'गिट चेकआउट' क्यों 'मास्टर' शाखा से 'टेस्ट' शाखा में स्थानीय परिवर्तन विलय करता है हालांकि मैंने कुछ भी नहीं किया? – Razer

+0

आपका क्या मतलब है "मास्टर से स्थानीय परिवर्तन विलय"? यह वास्तव में 'विलय' नहीं कर रहा है। – Mars

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