मास्टर शाखा में परिवर्तन करते समय त्रुटि: मेरे स्थानीय परिवर्तनों को चेकआउट द्वारा अधिलेखित कर दिया जाएगा


127

यह प्रश्न इस एक के समान है , लेकिन अधिक विशिष्ट है।

मेरी दो शाखाओं ( stagingऔर beta) के साथ एक परियोजना है ।

मैं बग को ठीक करने के stagingलिए masterशाखा का विकास करता हूं , और उसका उपयोग करता हूं । इसलिए अगर मैं मंचन पर काम कर रहा हूं और मुझे कोई त्रुटि दिखाई दे रही है, तो मैं masterशाखा में बदल जाता हूं :

git checkout master

और सामान करो:

git add fileToAdd
git commit -m "bug fixed"

और फिर मैं दोनों शाखाओं में विलीन हो गया:

git checkout staging
git merge master
git checkout beta
git merge beta

और कोई बात नहीं अगर वहाँ काम कर रहे पेड़ पर अन्य फाइलें हैं।

लेकिन अब, जब मैं masterशाखा में बदलने की कोशिश कर रहा हूँ, मुझे एक त्रुटि मिल रही है :

error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting

मुझे लगा कि मुझे फाइल को स्टेजिंग एरिया से हटाना चाहिए:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php

लेकिन मुझे वही त्रुटि मिल रही है। अगर मुझे git statusमिलता हैNo changes to commit


4
क्या आपने कोशिश की है reset --hard? यदि आप वास्तव में सुनिश्चित हैं कि आप अपने परिवर्तनों को छोड़ना चाहते हैं। या यदि आप नहीं करते हैं, तो उपयोग करें।
मई को केल्टर

@keltar - नहीं, मैं अपने परिवर्तनों को नहीं छोड़ना चाहता। बस उन्हें काम करने वाले पेड़ पर बाद के लिए रखें
मानोलो

1
मुझे नहीं लगता कि आप बिना किसी परिवर्तन के रखते हुए शाखाओं को बदल सकते हैं, लेकिन मैं आसानी से गलत हो सकता हूं - वास्तव में मेरा क्षेत्र नहीं। कोशिश करो git add your-fileऔर प्रतिबद्ध।
मई को केल्टर

@keltar - मैंने इस तरह से पहले काम किया है। मैं stagingअब कोई बदलाव नहीं करना चाहता ।
मनोलो

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

जवाबों:


128

आपकी त्रुटि तब दिखाई देती है जब आपने किसी फ़ाइल को संशोधित किया है और जिस शाखा को आप स्विच कर रहे हैं उसमें इस फ़ाइल के लिए भी बदलाव हैं (नवीनतम मर्ज बिंदु से)।

आपके विकल्प, जैसा कि मैं देख रहा हूं, वे हैं - प्रतिबद्ध हैं, और फिर अतिरिक्त बदलावों के साथ इस कमिट में संशोधन करें (जब तक वे pushएड नहीं करते हैं, तब तक जीआईटी में कमिट्स को संशोधित कर सकते हैं ); या - उपयोग करें:

git stash save your-file-name
git checkout master
# do whatever you had to do with master
git checkout staging
git stash pop

git stash saveअपने परिवर्तनों को शामिल करने वाले स्टैश बनाएंगे, लेकिन यह किसी भी कमेटी या ब्रांच से संबद्ध नहीं है। git stash popआपकी वर्तमान शाखा में नवीनतम स्‍टैश प्रविष्टि लागू करेगा, सहेजे गए परिवर्तनों को पुनर्स्थापित करेगा और इसे स्‍टैश से निकाल देगा।


3
धन्यवाद। क्या आप सुनिश्चित हैं कि यह मेरे काम करने वाले पेड़ (जोड़ा फ़ाइलों में नहीं) पर कोई बदलाव नहीं करेगा? मैं अपने परिवर्तनों को ढीला नहीं करना चाहता: - /
मनोलो

ओह, addजब वास्तव में यह गलत है save.. अपडेट किया गया। आप का मतलब है, अन्य फ़ाइलों के लिए? git stash saveफ़ाइल नाम के बिना पैरामीटर सभी संशोधित फ़ाइलों को बचाएगा, यदि आप चाहते हैं (और उन्हें नवीनतम-कमिटेड स्थिति में वापस लाएं)। और डायरेक्टरी ट्री की अतिरिक्त कॉपी होने से कभी दर्द नहीं होता है, लेकिन मैं हमेशा इसके बारे में पागल हूं।
1524 पर keltar

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

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

1
@ इसका शाखाओं से कोई लेना-देना नहीं है, समस्या बिना किसी परिवर्तन के है। चेकआउट, परिभाषा के अनुसार, अपनी फ़ाइलों को स्थिति में रीसेट masterकरना होगा, लेकिन ऐसा करने से यह वर्तमान सामग्री खो देगा, और चूंकि यह सामग्री प्रतिबद्ध नहीं है, इसलिए बाद में इस स्थिति में वापस आना असंभव होगा, इसलिए एक त्रुटि बाद में खोए हुए बदलावों से परेशान नहीं होंगे।
कल्टार

150

मैंने उसी समस्या का सामना किया और इसे हल किया

git checkout -f branch

और इसके विनिर्देश स्पष्ट हैं।

-फ, --फोर्स

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

सूचकांक से रास्तों की जाँच करते समय, अनमैरिड एंट्रीज़ पर असफल न हों; इसके बजाय, अनमैरिड एंट्रीज़ को अनदेखा किया जाता है।


7
जब मेरा git जाम हो गया (कोई स्थानीय परिवर्तन नहीं लेकिन फिर भी वह त्रुटि है), तो इस समाधान से मुझे मदद मिली!
लुकायर

5
धन्यवाद, आपने मेरी स्क्रीन को इसके माध्यम से मुट्ठी होने से बचाया।
उल्लू

3
मैंने अपने परिवर्तनों को इस तरह से खो दिया
जेसेक डेज़र्डज़िकोव्स्की

1
हां आप ऐसा करने से बदलाव खो देंगे, यह एक बड़ी चेतावनी के साथ आना चाहिए।
अलेक्जेंडर मिल्स

मैं इसे दूसरे रास्ते के आसपास चाहता हूं। मास्टर मेरी शाखा के पीछे है और मैं मास्टर के साथ अद्यतित हूं लेकिन यह अभी भी शाखाओं को बदलने में असमर्थ है। गिट बग होना चाहिए।
jgmjgm

12

यदि आप अपने स्थानीय परिवर्तन नहीं करना चाहते हैं, तो आप अपनी शाखा को चेकआउट के लिए बाध्य कर सकते हैं।

git checkout -f branch_name

1
यह sudoआवश्यक नहीं है, यह केवल फ़ाइल अनुमतियों को तोड़ देगा। यह एक साल पहले @kiki_yu द्वारा पोस्ट की गई समान कमांड है , लेकिन यह इससे भी बदतर है।
केनोरब

2
मैंने अपने बदलाव इस तरह खो दिए
Jacek Dziurdzikowski

2
@JacekDziurdzikowski तो आपने दो बार अपने परिवर्तनों को खो दिया (देखें kiki_yu के उत्तर पर टिप्पणी), दोनों समाधानों को लागू करके जो बहुत स्पष्ट रूप से उल्लेख किया गया कि स्थानीय परिवर्तनों को त्यागना बहुत उद्देश्य था । क्या मेरा व्यंग्य डिटेक्टर टूट गया है या ... आप गंभीर हैं?
रोमेनवलेरी

@RomainValeri हम्म, मुझे लगता है कि दूसरों को चेतावनी देने का मेरा तरीका था जो कि जीआईटी के साथ भीख मांगने वाले हैं (उन्हें इस पोस्ट को पढ़कर शुरुआती होना होगा) वे किसी भी बदलाव के लिए अलविदा कहने के लिए तैयार रहें। मैंने उस समय सोचा कि एक शाखा में किए गए परिवर्तन उस शाखा पर तब तक रहना चाहिए जब तक कि मैं उसे फिर से जाँच न कर लूँ। नए लोगों को संकेत जो इस तरह से भी सोचते हैं: git stash का उपयोग करें :)
Jacek Dziurdzikowski

बिना किसी कारण के डुप्लिकेट उत्तर। पहले उत्तर में और भी अधिक जानकारी है।
मेकितगढ़

9

मैंने उसी समस्या का सामना किया और इसे हल किया

git checkout -f शाखा

खैर, -fस्विच के साथ सावधान रहें । यदि आप -fस्विच का उपयोग करते हैं, तो आप किसी भी परिवर्तन नहीं करेंगे । जबकि कुछ उपयोग के मामले हो सकते हैं जहां यह उपयोग करने के लिए सहायक होता है -f, ज्यादातर मामलों में, आप stashअपने परिवर्तनों और फिर switchशाखाओं के लिए चाहते हो सकते हैं । stashingप्रक्रिया जैसा कि ऊपर बताया गया है।


0

आप वर्तमान शाखा में जांच कर सकते हैं, दूसरी शाखा में चेकआउट कर सकते हैं, और अंत में चेरी-पिक कर सकते हैं (मर्ज के बदले)।


यदि आप इस पर अधिक स्पष्टीकरण देते हैं तो यह अधिक उपयोगी हो सकता है।
मेकितगढ़

-1

यदि आपको एक अलग शाखा की जाँच करने की कोशिश करते समय यह मिलता है:

my-mac:myGHProject ~$ git checkout other-branch
error: Your local changes to the following files would be overwritten by checkout:
    src/main/resources/reference.conf

इसका मतलब यह है कि आपके द्वारा जाँच की गई शाखा पर आपको कुछ बदलाव करने की आवश्यकता है - या आपको उपरोक्त सभी बिंदुओं में से अधिकांश के रूप में उन्हें मिटा देना या उन्हें स्टैश करना होगा। 20 में से 19 बार मैं अपने बदलावों के लिए अधिक संभावनावादी हूं।

my-mac:myGHProject ~$ git branch
  * my-local-branch
  * develop    

my-mac:myGHProject ~$ git status
On branch my-local-branch
   Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)
 modified:   src/main/resources/reference.conf

my-mac:myGHProject ~$ git add src/main/resources/reference.conf

my-mac:myGHProject ~$ git commit -m "updates on some config"
  [my-local-branch] updates on some config
  1 file changed, 131 insertions(+), 85 deletions(-)

अब जब आपने ऐसा कर लिया है, तो आप दूसरी शाखा देख सकते हैं और बहुत आसानी से आगे और पीछे स्विच कर सकते हैं।

my-mac:myGHProject ~$ git checkout other-branch

my-mac:myGHProject ~$ git status
  On branch other-branch

my-mac:myGHProject ~$ git checkout my-local-branch
  Switched to branch 'my-local-branch'

बस सुनिश्चित करें कि आप दोनों सही शाखा पर हैं और जब आप अपना गिट पुश ओरिजिन $ {शाखा} कमांड चलाते हैं, तो सही शाखा पर धकेलते हैं। नोट: यदि आपके पास आपकी परियोजना सीधे इंटेलीज में झुकी हुई है, तो आप देख सकते हैं कि आपने मुख्य विंडो के निचले दाएं कोने में अपनी शाखा बदल दी है।

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