Git स्टेजिंग एरिया से फाइल कैसे निकालें?


547

मैंने अपनी स्थानीय रेपो में अपनी कुछ फ़ाइलों में परिवर्तन किए, और फिर मैंने वह किया git add -Aजो मुझे लगता है कि मंचन क्षेत्र में बहुत सी फाइलें जोड़ी गईं। मैं स्टेजिंग क्षेत्र से सभी फ़ाइलों को कैसे हटा सकता हूं?

मैं ऐसा करने के बाद, मैं बस मैन्युअल रूप से करूँगा git add "filename"


2
उम्मीद है कि आप इस के लिए देख रहे हैं: stackoverflow.com/questions/1505948/…
sumitb.mdi

27
git statusपहले से ही आपको बताता है कि अगर आप फ़ाइलों को अनस्टेज करना चाहते हैं तो क्या करें।
माइकल फोकरिसिस

6
@MichaelFoukarakis git की स्थिति उतनी मददगार नहीं है यदि आप एक पूरी निर्देशिका को अनस्टेज करना चाहते हैं यदि यह टर्मिनल को आउटपुट के साथ बाढ़ देता है (जैसे कि नोड_मॉड्यूल्स)
whiterook6

2
भविष्य में, सभी को जोड़ने के बजाय, आप ( git add -pया git add --patchवे समान हैं) के साथ सहज होना चाह सकते हैं । यह ध्वज आपको इंटरेक्टिव रूप से चयन करने की अनुमति देता है कि आप किन फ़ाइलों या व्यक्तिगत परिवर्तनों को चरणबद्ध करना चाहते हैं - फिर आप कमिट में शामिल किए गए काम के साथ बहुत अधिक बारीक अनाज प्राप्त कर सकते हैं।
गाबे

जवाबों:


688

आप का उपयोग कर सूचकांक से फ़ाइलों को अस्थिर कर सकते हैं

git reset HEAD -- path/to/file

ठीक उसी तरह git add, आप निर्देशिका द्वारा और इसके बाद पुनरावृत्ति फ़ाइलों को अस्थिर कर सकते हैं, इसलिए एक ही बार में सब कुछ अस्थिर करने के लिए, इसे अपनी रिपॉजिटरी की मूल निर्देशिका से चलाएं:

git reset HEAD -- .

साथ ही, भविष्य के संदर्भ के लिए, git statusआपको एक राज्य से दूसरे राज्य में फ़ाइलों को स्थानांतरित करने के लिए आवश्यक कमांड बताएंगे।


5
$ git reset HEAD -- .उत्पादित fatal: Failed to resolve 'HEAD' as a valid ref.ध्यान दें कि मैं कभी नहीं किसी भी प्रतिबद्ध था, इसके पहले के git addबादgit init
Patrizio Bertoni

5
आप भी इस्तेमाल कर सकते हैं git reset @
एलेक्स

@alex क्या यह केवल सादे से बेहतर है git reset?
एंटनी हैचकिंस

7
@AntonyHatchkins @का पर्याय है HEAD
एलेक्स

पूरी तरह से मेरे लिए काम किया, धन्यवाद!
वेननीसेमर

303

उपयोग

git reset

सभी मंचित फ़ाइलों को अनस्टेज करने के लिए।


3
क्या मैं पूछ सकता हूं कि यह कैसे अलग है git reset HEAD --या क्या यह उसी ऑपरेशन को करने का एक अधिक सफल तरीका है?
प्रशन

1
@ProNotion रीसेट HEADडिफ़ॉल्ट रूप से उपयोग करता है। उन का क्या उद्देश्य है --अपने में git reset HEAD --?
एंटनी हैचकिंस

@AntonyHatchkins यह एक पूर्ण विराम (अवधि) द्वारा पीछा किया जाना चाहिए था और स्वीकृत उत्तर में उदाहरण से लिया गया था।
प्रो ० भावना

11
@ProNotion क्षमा करें, मैंने आपको गलत समझा। git reset HEAD -- .इसमें अलग है कि यह केवल वर्तमान निर्देशिका में फ़ाइलों को रीसेट करता है और नीचे git resetप्रोजेक्ट में सभी फ़ाइलों को रीसेट करता है।
एंटनी हैचकिंस

100

यदि आपने पहले से ही अवांछित फ़ाइलों का एक समूह बना रखा है, तो आप उन्हें अस्थिर कर सकते हैं और उन्हें हटाने के रूप में चिह्नित करने के लिए बता सकते हैं (बिना वास्तव में उन्हें हटाए)

git rm --cached -r .

--cachedयह बताता है कि स्टैगिंग और इंडेक्स से पथों को हटाने के लिए बिना फाइलों को हटाए और -rनिर्देशिकाओं पर पुनरावर्ती रूप से कार्य करता है। तब आप git addकिसी भी फाइल को ट्रैक कर सकते हैं।


मुझे लगता है कि यह "git rm -" है।
अलेक्जेंडर मिल्स

1
"गिट rm -" के साथ फ़ाइलों को नहीं हटाने के बारे में एक घातक त्रुटि है।
अलेक्जेंडर मिल्स

@AlexMills मैं rmसभी फ़ाइलों को अस्थिर करने के लिए वास्तविक विकल्पों का उल्लेख करने के लिए अपने उत्तर को अपडेट करता हूं ।
मैक्स

2
मैंने इसे एक विलक्षण फ़ाइल पर इस तरह आज़माया: "git rm --cached my / file.java" और मैं उस फ़ाइल को अभी भी स्टेजिंग क्षेत्र में देखता हूं, लेकिन हटाए गए के रूप में! जब आप इस कमांड को चलाते हैं तो आपकी फाइलें वास्तव में डिलीट हो जाती हैं या अन-स्टेज हो जाती हैं? यदि आप उस व्यवहार की तलाश में नहीं हैं, तो मैं उत्तर के साथ जाऊंगा।
ओरवेलहिंडेनबर्ग

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

30

आप उपयोग कर सकते हैं

git reset HEAD

फिर आपके द्वारा इच्छित विशिष्ट फ़ाइलों को जोड़ें

git add [directory/]filename

आप -x पैरामीटर जोड़ सकते हैं और उपेक्षित फ़ाइलों को भी हटा दिया जाएगा। यह उपयोगी है यदि आप अपने .gitignore के साथ गड़बड़ करते हैं और वहां कुछ उपयोगी है (जैसा कि मेरे मामले में है)। ( git-scm.com/docs/git-clean )
रखें

1
अतिरिक्त फ़ोल्डरों के साथ, git statusआपको काम करने वाली निर्देशिका को साफ - झूठ बताएगा ! git clean -dfths काम किया, धन्यवाद।
सिंह

5
ध्यान दें कि git clean -dfफ़ाइलों को स्थायी रूप से हटा देगा। UNIX- जैसी प्रणालियों पर, यह कॉल करेगा unlink()और आपकी हटाई गई फ़ाइलें पुनर्प्राप्त करने योग्य नहीं होंगी।
हैनक्स्यू

11
ओपी फाइलों को अस्थिर करने के बारे में पूछता है। आप उसे फ़ाइलों को हटाने की सलाह देते हैं। मैं आपको सुझाव देना चाहता हूं कि मचान क्षेत्र उत्तर देने से पहले क्या है।
एंटनी हैचकिंस

मेरी पूरी सहेजे नहीं गई परियोजना को हटाने के लिए धन्यवाद।
वंसुइता जूनियर

7

जैसा कि अन्य उत्तरों में उल्लेख किया गया है, आपको उपयोग करना चाहिए git reset। यह कार्रवाई को पूर्ववत करेगा git add -A

नोट: git reset यह git reset --mixedजो करता है के बराबर है

सूचकांक को रीसेट करता है, लेकिन काम करने वाले पेड़ को नहीं (यानी, बदली गई फाइलें संरक्षित हैं, लेकिन प्रतिबद्ध के लिए चिह्नित नहीं हैं) और रिपोर्ट करता है कि क्या अद्यतन नहीं किया गया है। यह डिफ़ॉल्ट क्रिया है। [ git रीसेट करें ]


2
.. और मंचन क्षेत्र से एक एकल फ़ाइल को निकालने के लिए , आप कर सकते हैंgit reset filenameToNotCommit
शेरिलहोमन

5

अब v2.24.0 पर सुझाव देता है

git restore --staged .

फ़ाइलों को अस्थिर करने के लिए।


1

आप कुछ तरीकों से स्टेजिंग क्षेत्र को रीसेट कर सकते हैं:

  1. HEAD को रीसेट करें और नीचे दिए गए चेक-इन में फिर से सभी आवश्यक फाइलें जोड़ें:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

यह उत्तर मौजूदा छह उत्तरों से अलग क्या है?
एंटनी हैचकिंस

1

स्टेजिंग एरिया के उपयोग से सभी फ़ाइलों को हटाने के लिए -
git reset
विशिष्ट फ़ाइल उपयोग को हटाने के लिए -
git reset "File path"


1

उपयोग

git reset HEAD

यह स्टेजिंग एरिया से सभी फाइलों को हटा देगा


1

यदि अवांछित फ़ाइलों को स्टेजिंग क्षेत्र में जोड़ा गया था, लेकिन अभी तक प्रतिबद्ध नहीं है, तो एक साधारण रीसेट काम करेगा:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

वर्तमान कार्यशील निर्देशिका में केवल अस्थिर परिवर्तनों को हटाने के लिए, उपयोग करें:

git checkout -- .

0

" git reset HEAD <file>..." का उपयोग फ़िल्टर्स को अनस्टेज करने के लिए करें

पूर्व: सभी फ़ाइलों को अस्थिर करने के लिए

git reset HEAD .

एक फ़ाइल को अनस्टेज करने के लिए

git reset HEAD nameFile.txt

-3

मैंने इन सभी तरीकों को आजमाया लेकिन मेरे लिए किसी ने काम नहीं किया। मैं .git फ़ाइल का उपयोग कर हटाया rm -rf .gitप्रपत्र स्थानीय भंडार फिर से और फिर से किया था git initऔर git addऔर नियमित आदेशों। इसने काम कर दिया।


4
Git डॉक्स पढ़ना आमतौर पर xkcd.com/1597 ;) की सलाह का पालन करने से अधिक फायदेमंद होता है ;
एंटनी हैचकिंस

1
हो सकता है कि आपको अपने विशिष्ट मामले में एक अखंडता की समस्या थी और यह विकल्प बचा था, फिर भी यह अनुशंसित नहीं है।
Shad

कृपया ऐसा न करें, आप अपने पूरे गिट रेपो को नष्ट कर देंगे।
लेनरट रोलैंड

-5

आपकी फ़ाइल को पूर्ववत करने का सबसे अच्छा तरीका है जो पहले से ही मंचन क्षेत्र में है git रीसेट --hard जो आपकी मंचित फ़ाइलों को वापस लाता है। अब सावधान, यह मंचन और अस्थिर परिवर्तनों को हटा देगा।


2
यह गलत और खतरनाक है !!! ओपी बाद में फ़ाइलों को फिर से "मैन्युअल रूप से जोड़ना" चाहता है, लेकिन --hardउन्हें हमेशा के लिए हटा देता है।
एंटनी हैचकिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.