Git: स्थानीय परिवर्तनों को पूर्ववत नहीं कर सकता (त्रुटि: पथ…


336

मेरे पास वर्किंग ट्री स्टेट है

$ git status foo/bar.txt
# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       deleted by us:      foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

फ़ाइल foo/bar.txtहै और मैं इसे फिर से "अपरिवर्तित स्थिति" पर लाना चाहता हूं ('svn revert' के समान):

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M       foo/bar.txt

अब यह भ्रमित हो रहा है:

$ git status foo/bar.txt
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo/bar.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo/bar.txt
#

नई और संशोधित दोनों वर्गों में एक ही फाइल ? मुझे क्या करना चाहिए?


7
काश कोई व्यक्ति यह समझा सके कि हम इस स्थिति में कैसे आते हैं, ऐसा क्यों होता है और समाधान क्यों काम करता है।
मार्कोस डेयोन

1
मैं इस स्थिति में आ गया जब मैंने अपने स्टैश को एक रिबेस के बाद पॉपअप किया जो मुझे मर्ज संघर्ष में मिला (स्टैस पॉप एक मर्ज करता है) .... इसे हल करने के लिए, मैंने एक "चेकआउट -इयर" किया था .... जाहिर तौर पर मेरे बदलाव अभी भी थे .... उन लोगों को हटाने के लिए..मैंने फिर से फ़ाइल पर एक चेकआउट की कोशिश की..जब मैंने उपरोक्त त्रुटि देखी।
अरिंदम रॉयचौधरी

जवाबों:


555

आपने इसे गलत तरीके से किया। आप पहले फ़ाइल को रीसेट करने के लिए हैं, फिर फ़ाइल को बदलने के लिए, फिर स्थानीय परिवर्तनों को वापस लाने के लिए चेकआउट करें।

इसे इस्तेमाल करे:

$ git reset foo/bar.txt
$ git checkout foo/bar.txt

धन्यवाद; एक जादू की तरह काम किया! मुझे प्रतिबद्ध होना चाहिए ( -a arg के साथ नहीं , प्रासंगिक परिवर्तन पहले से ही मंचित थे) और फिर मैं सामान्य की तरह धक्का / खींचने में सक्षम था।
पैट्रिक

18
मेरे लिए यह आवश्यक है: <br/> $ git रीसेट - foo / bar.txt <br/> $ git चेकआउट - foo / bar.txt <br/> (बीच में अतिरिक्त "-" नोटिस करें)
Jan

4
अच्छा वाक्यविन्यास "git रीसेट HEAD file1 file2 ..." है तो "git checkout - file1 file2 ..."
थॉमस डेकाक्स

1
यह हमेशा आश्चर्यचकित करता है जब उच्चतम मतदान का उत्तर मूल रूप से सिर्फ यह कहता है कि "आप इसे गलत कर रहे हैं" :)
nathanchere

4
एक व्याख्या (क्या बातें करते हैं पर) बहुत अच्छा होता ...
Kissaki

51

इसने मेरे लिए पूरी तरह से काम किया:

$ git reset -- foo/bar.txt
$ git checkout foo/bar.txt

14
git checkout origin/[branch] .
git status

// नोट डॉट (।) अंत में। और सब अच्छा होगा


-2
git checkout foo/bar.txt

क्या आपने कोशिश की? (बिना हेड कीवर्ड के)

मैं आमतौर पर इस तरह से अपने परिवर्तनों को वापस करता हूं।


1
checkoutमर्ज के बीच में प्रयास करते समय विशिष्ट त्रुटि : $ git co path/to/file= परिणाम => error: path 'path/to/file' is unmerged => इसलिए, पहले भाग: $ git reset path/to/fileऔर फिर git checkout path/to/fileकाम करना चाहिए।
माइकल

2
एचईएडी को निर्दिष्ट नहीं करने से सूचकांक से चेक चेकआउट हो जाएगा, जो एक कमजोर ऑपरेशन है (सामग्री स्रोत हेड के बजाय सूचकांक है)। इसके अलावा मुझे नहीं लगता है कि इस मामले में बिल्कुल फर्क पड़ता है - विशिष्ट समस्या के साथ कहा गया सवाल। क्या आपने कोशिश की?
Kissaki

-4

मुझे सभी 'गंदे' राज्यों की लौकिक हैंडलिंग के लिए git stash बहुत उपयोगी लगता है।


4
यदि आपको यह उपयोगी लगता है, तो कृपया इस बारे में स्पष्टीकरण दें कि यह इस ठोस मामले में कैसे मदद करेगा। आप इसे यहाँ कैसे उपयोग करेंगे?
Kissaki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.