मैं स्टेजिंग क्षेत्र (पूर्ववत जोड़) से एक एकल फ़ाइल कैसे निकालूं?


1229

स्थिति: मेरे पास अनुक्रमणिका में पहले से मौजूद फाइलों के साथ एक Git रिपॉजिटरी है। मैं कई फ़ाइलों में परिवर्तन करता हूँ, Git खोलें और इन फ़ाइलों को "git add" के साथ अपने स्टेजिंग क्षेत्र में जोड़ें।

प्रश्न: मैं उन फ़ाइलों में से एक को स्टेजिंग क्षेत्र से कैसे निकालूं लेकिन इसे इंडेक्स से नहीं हटाता या फाइल में ही बदलाव को पूर्ववत नहीं करता?


40
मचान क्षेत्र है , सूचकांक तो शायद आप वास्तव में स्पष्ट कर सकते तुम क्या मतलब है?
सीबी बेली


जवाबों:


1901

यदि मैं प्रश्न को सही ढंग से समझता हूं, तो आप बस git addउस फ़ाइल के लिए "पूर्ववत करें" करना चाहते हैं ।

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

git reset HEAD -- <file>

यदि आपको स्टेजिंग क्षेत्र से पूरी निर्देशिका (फ़ोल्डर) को निकालने की आवश्यकता है , तो उपयोग करें

git reset HEAD -- <directoryName>

आपके संशोधन रखे जाएंगे। जब आप git statusफ़ाइल चलाते हैं तो एक बार फिर से संशोधित के रूप में दिखाई देगा, लेकिन अभी तक मंचन नहीं किया गया है।

देखें git resetआदमी पेज जानकारी के लिए।


41
धन्यवाद ... मैंने अभी देखा है कि मंचन की गई फ़ाइलों के ठीक ऊपर बताया गया है। मुझे लगता है कि मैं उस स्क्रीन को देख रहा था जब तक मैं चुनिंदा रूप से वही चुन रहा था जो मैं देखना चाहता था।
PHLAK

2
यह मेरे सभी परिवर्तनों को रोकता है, हर सलाह के विपरीत जो मैंने कहीं भी प्राप्त की है (मैन पेज, यहां, दोस्तों, और सी)। मैं कुछ दिन सोचता रहता हूं कि यह वही होगा जो विज्ञापित है, लेकिन नहीं।
rektide

6
वहाँ वैसे भी फ़ाइलों को हटाने के लिए है जब वहाँ कोई रेपो करने के लिए नहीं किया गया है?
जारेड फोर्सिथ

3
मैं इस सवाल पर आते-जाते रहता हूं। मैं इसे अधिक बार क्यों नहीं बढ़ा सकता? :)
पूस

3
@Jared Forsyth किसी फ़ाइल को निकालने के लिए कभी भी मंच से कमिट नहीं किया git rm --cached FILEजाता है जैसा कि किसी अन्य उत्तर द्वारा सुझाया गया है।
१५

150
git rm --cached FILE

,

git rm -r --cached CVS */CVS

28
सच है, लेकिन यह बेहतर है git resetकि मुझे लगता है कि यहाँ उपयोग करने के लिए , जैसा कि आप thechached विकल्प का उपयोग कर सकते हैं और git rmकमांड का उपयोग करके जल्दी से दुखी हो git resetसकते हैं :-) आप सुरक्षित पक्ष पर हैं, यदि आप "कुछ विकल्प" जोड़ना भूल जाते हैं तो यह है दैनिक उपयोग के लिए यह परिवर्तन "सुरक्षित" रखें (मैं बात कर रहा हूँ git reset --hard)।
कोनराड 'ktoso' Malawski

20
यदि आपके पास पिछले कमिट नहीं हैं तो यह विधि उपयोगी है।
SomeKittens

2
git rm --cached FILEचरण फ़ाइल हटाने, फ़ाइल को हटाने के बिना काम कर रहे पेड़ बनाते हैं। यह सवाल से अलग है, जो पूर्ववत करने के बारे में था git add
संपो स्मोलैंडर

1
यदि आपने फ़ाइल को काम के पेड़ से हटा दिया है तो यह उत्तर एक त्रुटि देता है।
सैमुअल रॉबर्ट

3
git rm --cachedफ़ाइल को इंडेक्स से हटाए जाने का कारण होगा, यानी फ़ाइल अनट्रैक फ़ाइल बन जाएगी । मुझे नहीं लगता कि यह वही है जो ओपी चाहता है। कृपया यहां एक संबंधित धागा देखें: stackoverflow.com/questions/45047810/…
smwikipedia

88

git reset <file>

काम करता है या नहीं, आपके पास कोई पिछला कमिटमेंट है।


53

तो, टिम हेनिगन के जवाब के लिए एक मामूली ट्वीक: आपको फ़ाइल नाम से पहले - उपयोग करने की आवश्यकता है। यह इस तरह दिखेगा:

git reset HEAD -- <file>

6
क्या करता --है और इसे क्यों जोड़ता है? मैंने किया git reset HEAD <file>और यह काम किया।
पाओलो

15
--एक विभक्त की तरह है। यदि फ़ाइल नाम अपरंपरागत है जैसे ( -fया master) git इसे फ़ाइल नाम के बजाय कमांड लाइन तर्क या शाखा नाम के रूप में व्याख्या करेगा। यहां देखें
एंड्रयू

3
यह मेरे लिए काम करता है, जहां बिना कमांड - उस फाइल के लिए कोई पिछला कमिट होने के कारण नहीं। धन्यवाद।
मैट

17
git reset filename.txt

यदि आपके पास filename.txt में संशोधन है, तो आपने इसे गलती से मंच पर जोड़ दिया और आप फ़ाइल को मंचन से हटाना चाहते हैं लेकिन आप परिवर्तनों को खोना नहीं चाहते हैं।


6

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

git reset -p

या

git reset -p <file_name>

यह कमांड मूल रूप से रिवर्स है git add -p: यह केवल स्टेजिंग क्षेत्र से चयनित परिवर्तनों को हटा देगा। मुझे लगता है कि मैंने इसे गलती से जोड़ा है।


4

यदि आप एक निश्चित पैटर्न का पालन करके फ़ाइलों को निकालना चाहते हैं और आप उपयोग कर रहे हैं git rm --cached, तो आप फ़ाइल-ग्लोब पैटर्न का भी उपयोग कर सकते हैं।

देखें यहाँ


2

तुम्हें चाहिए:

  • किसी एकल फ़ाइल से प्रभावित

  • फाइल को स्टेजिंग एरिया से निकालें

  • इंडेक्स से सिंगल फाइल न निकालें

  • परिवर्तन को पूर्ववत न करें

और समाधान है

git reset HEAD file_name.ext

या

git reset HEAD path/to/file/file_name.ext

2

जब आप करते हैं git status, तो गिट आपको बताता है कि कैसे अस्थिर होना है:

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

इसलिए git reset HEAD <file>मेरे लिए काम किया और परिवर्तन अन-टच हो गए।


2

मुझे लगता है कि आप शायद सूचकांक की अवधारणा से भ्रमित हो गए हैं , जैसा कि @CB बेली ने टिप्पणी की है:

मंचन क्षेत्र सूचकांक है।

आप केवल एक ही चीज़ के रूप में निर्देशिका और सूचकांक का मंचन करने पर विचार कर सकते हैं ।
तो, @Tim हेनिगन के जवाब की तरह , मुझे लगता है:

आप बस git addउस फ़ाइल के लिए किया गया "पूर्ववत" करना चाहते हैं ।



यहाँ मेरा जवाब है:

आम तौर पर, एक मंच संचालन को पूर्ववत करने के दो तरीके हैं , जैसा कि पहले से ही वर्णित अन्य उत्तर हैं:

git reset HEAD <file>

तथा

git rm --cached <file>

लेकिन फर्क क्या है?

मान लें कि फ़ाइल का मंचन किया गया है और वर्किंग डायरेक्टरी में भी मौजूद है, git rm --cached <file>यदि आप इसे स्टेजिंग डायरेक्टरी से हटाना चाहते हैं , और फाइल को वर्किंग डायरेक्टरी में रखें । लेकिन ध्यान दें कि यह ऑपरेशन न केवल फ़ाइल को मचान निर्देशिका से हटा देगा, बल्कि यदि आप उपयोग करते हैं, तो फ़ाइल को मचान निर्देशिकाdeleted में चिह्नित करें

git status

इस ऑपरेशन के बाद, आप इसे देखेंगे:

        deleted:    <file>

यह फ़ाइल को मंचन निर्देशिका से हटाने का रिकॉर्ड है । यदि आप उस रिकॉर्ड को रखना नहीं चाहते हैं और केवल एक फ़ाइल के पिछले चरण के संचालन को पूर्ववत करना चाहते हैं, तो git reset HEAD <file>इसके बजाय उपयोग करें ।


-------- अंत का अंत --------

पुनश्च: मैंने कुछ उत्तरों का उल्लेख किया है:

git checkout -- <file>

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


2

संस्करण के बाद 2.23, Git ने वह git restoreकमांड पेश किया है जिसे आप ऐसा करने के लिए उपयोग कर सकते हैं। आधिकारिक दस्तावेज का हवाला देते हुए:

एक पुनर्स्थापना स्रोत से कुछ सामग्री के साथ काम कर रहे पेड़ में निर्दिष्ट पथ को पुनर्स्थापित करें। यदि कोई पथ ट्रैक किया गया है, लेकिन पुनर्स्थापना स्रोत में मौजूद नहीं है, तो उसे स्रोत से मिलान करने के लिए निकाल दिया जाएगा।

कमांड का उपयोग इंडेक्स में कंटेंट को रीस्टोर करने के लिए --stagedया वर्किंग ट्री और इंडेक्स दोनों को रिस्टोर करने के लिए भी किया जा सकता है --staged --worktree

तो आप git restore --staged <path>फ़ाइल को इनवॉइस और अनस्टेज कर सकते हैं लेकिन आपके द्वारा किए गए परिवर्तनों को भी रख सकते हैं। याद रखें कि यदि फ़ाइल का मंचन नहीं किया गया था तो आप अपने द्वारा किए गए सभी परिवर्तनों को खो देते हैं।


1

यदि आप कई ट्रैक की गई फ़ाइलों में परिवर्तन करते हैं, लेकिन केवल उनमें से कुछ को चरणबद्ध करना चाहते हैं, तो

git add .

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

और न ही यह आदर्श है कि किसका एक समूह है

git add path/to/file1 path/to/file2

यदि आपके पास बहुत से नेस्टेड निर्देशिकाएं हैं (जो कि अधिकांश परियोजनाओं में मामला है) - कष्टप्रद हो जाता है

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

Ctrl+U (विंडोज के लिए)

उन्हें अस्थिर करना।


1

Git के नए संस्करणों के लिए है git restore --staged <file>

जब मैं git statusGit संस्करण के साथ करता हूं तो 2.26.2.windows.1इसे अस्थिर करने के लिए भी अनुशंसित किया जाता है:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

( यह पोस्ट दिखाती है, कि पहले के संस्करणों git reset HEADमें इस बिंदु पर सिफारिश की गई थी)

मैं इस पोस्ट के बीच के अंतर को समझाते हुए git revert, git restoreऔर git resetइसके लिए अतिरिक्त पैरामीटर भी सुझा सकता हूं git restore


0

मेरा नमूना:

$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   ShopBack/Source/Date+Extension.swift
    modified:   ShopBack/Source/InboxData.swift
    modified:   ShopBack/en.lproj/Localizable.strings

जैसा कि आप देख सकते हैं

> Changes to be committed:
>       (use "git reset HEAD <file>..." to unstage)

-1

आपको फ़ाइल की निर्देशिका में होना चाहिए और फिर निम्नलिखित को टर्मिनल में टाइप करना होगा

git reset HEAD .

मान लें कि आपको केवल एक फ़ाइल रीसेट करने की आवश्यकता है।



-10

git checkout -- <file>

यह स्टेजिंग एरिया से फ़ाइलों को हटाने के लिए पूरी तरह से काम करता है


4
जैसा कि नीचे उल्लेख किया गया है, यह फ़ाइल में बदल जाती है, जो ओपी जाना चाहता है, की तुलना में एक कदम आगे जा रहा है।
स्टॉली

git rm flie.txt --cached
जुआन रामिरेज़

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