चरणबद्ध हटाए गए फ़ाइलें


499

कहो कि मेरे पास मेरे गिट रिपॉजिटरी में एक फाइल है जिसे कहा जाता है foo

मान लीजिए कि इसे rm(नहीं git rm) के साथ हटा दिया गया है । फिर git स्टेटस दिखाएगा:

Changes not staged for commit:

    deleted: foo

मैं इस व्यक्तिगत फ़ाइल को कैसे हटाऊं?

अगर मैं कोशिश करूँ:

git add foo

इसे कहते हैं:

'foo' did not match any files.

2
क्या पुराने गिट संस्करणों में यह एक समस्या थी? आजकल यह एक नहीं लगता है, यह संशोधित फ़ाइलों के समान काम करता है।
cst1992

जवाबों:


22

Git 2.0.0 के बाद से, git addफ़ाइल विलोपन को भी स्टेज करेगा।

जीआईटी 2.0.0 डॉक्स - गिट-ऐड

<pathspec> ...

से सामग्री जोड़ने के लिए फ़ाइलें। Fileglobs (उदा। * .C) सभी> मिलान वाली फ़ाइलों को जोड़ने के लिए दिया जा सकता है। इसके अलावा एक अग्रणी निर्देशिका नाम (जैसे dir / file1 और dir / file2 को जोड़ने के लिए dir) को निर्देशिका की वर्तमान स्थिति से मिलान करने के लिए अनुक्रमणिका को अद्यतन करने के लिए दिया जा सकता है (उदाहरण के लिए dir निर्दिष्ट करना न केवल एक फ़ाइल dir / file1 संशोधित करेगा) काम कर रहे पेड़ में, एक फ़ाइल dir / file2 काम कर रहे पेड़ में जोड़ा गया, लेकिन साथ ही एक फ़ाइल dir / file3 काम कर रहे पेड़ को हटा दिया। ध्यान दें कि Git के पुराने संस्करण हटाए गए फ़ाइलों को अनदेखा करते थे; संशोधित या नई फ़ाइलों को जोड़ना चाहते हैं लेकिन हटाए गए लोगों को अनदेखा करें।


स्वीकृत उत्तर समस्या को हल नहीं करता है - और अन्य 2.0.0 के बाद से अधिक बोझिल हैं - यह सबसे अच्छा तरीका है! आपके पास मेरा अपवोट है
जोओ एंट्यून्स

518

git rm fooफ़ाइल को हटाने के लिए चरणबद्ध करने के लिए उपयोग करें । (यह फ़ाइल सिस्टम से फ़ाइल को भी हटा देगा, अगर इसे पहले हटाया नहीं गया था। यह, निश्चित रूप से, गिट से बहाल किया जा सकता है, क्योंकि यह पहले चेक इन किया गया था।)

फ़ाइल सिस्टम से हटाने के बिना फ़ाइल को हटाने के लिए स्टेज करना, उपयोग करना git rm --cached foo


8
इसके अलावा, आप --cacheकेवल रिपॉजिटरी से फाइल को हटाने के लिए झंडा जोड़ सकते हैं , और फाइल सिस्टम में अनछुए को छोड़ सकते हैं।
हौलेथ

इस ऑपरेशन को पूर्ववत् करने के लिए क्या प्रक्रिया होगी, अर्थात्, हटाने के लिए फ़ाइल को अन-स्टेज करें? क्या यह संभव है?
लोंगडा

82
वास्तव में ओपी ने पूछा कि पहले से ही फाइल को कैसे स्टेज किया जाए और इसके द्वारा क्या किया जा सकता है git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}"। अन्य उत्तर दिखा रहे हैं कि फ़ाइल हटाने को कैसे सही ढंग से मंचित किया जाए (लेकिन पहले से हटाई गई फ़ाइलों को कैसे मंचित किया जाए)। ps। xargsआधारित आदेश Ubuntu 12.04 पर मेरे लिए काम करता है, लेकिन जब मैं स्वयं कर git add -u deleted_file.txtकाम doens't यह। मेरा git 1.7.9.5 है
दिमित्री K

8
@DimitryK: git rmख़ुशी से डिलीट के लिए फाइल को स्टेज करेगा भले ही यह फाइलसिस्टम से पहले ही डिलीट हो गया हो। और ओपी की टिप्पणी के रूप में एक और जवाब बताते हैं, वे एक विशिष्ट फ़ाइल को स्टेज करना चाहते थे जो पहले ही हटा दी गई थी।
Wooble

3
git rmपहले से हटाई गई फ़ाइलों को स्टेज नहीं करता है। यह इस त्रुटि को फेंकता है fatal: pathspec '~.SLDASM' did not match any files:। यहाँ सबूत के साथ स्क्रीन हैं: i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png । पहला स्क्रीनशॉट स्पष्ट रूप से दिखाता है कि 2 फ़ाइलें हटा दी गई हैं और मंचन नहीं किया गया है, दूसरा स्क्रीनशॉट दिखाता है कि जब मैं टाइप करता हूं git rm "~$Box.SLDASM", तो यह त्रुटि फेंकता है।
कुलागिन

413

हालांकि यह git rm [FILE]वैकल्पिक रूप से उपयोग करने के लिए सही है , आप कर सकते हैं git add -u

git-addप्रलेखन के अनुसार :

-उ - चुप

इंडेक्स को वहीं अपडेट करें जहां इसकी एंट्री पहले से ही हो [FILE]। यह हटाता है और साथ ही साथ कार्यशील पेड़ से मिलान करने के लिए सूचकांक प्रविष्टियों को संशोधित करता है, लेकिन कोई नई फ़ाइल नहीं जोड़ता है।

यदि -u विकल्प का उपयोग करने पर कोई [FILE] नहीं दिया जाता है, तो पूरे काम करने वाले पेड़ में सभी ट्रैक की गई फाइलें अपडेट की जाती हैं (वर्तमान निर्देशिका और उसके उपनिर्देशिकाओं के लिए अद्यतन को सीमित करने के लिए उपयोग किए गए Git के पुराने संस्करण)।

जिस पर इंडेक्स रिफ्रेश हो जाएगा और फाइलों का सही तरीके से मंचन होगा।


56
हां git add -A .सभी परिवर्तन जोड़ देंगे, मैं विशेष रूप से एक हटाई गई फ़ाइल को चरणबद्ध करना चाहता था।
एंड्रयू टॉमाज़ोस

25
यह सभी संशोधित फ़ाइलों को जोड़ देगा; न सिर्फ हटाई गई फाइलें।
फॉरएवर

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

9
क्या केवल हटाई गई फ़ाइलों को चरणबद्ध करने और संशोधित करने का कोई तरीका नहीं है? बस उत्सुक।
अगस्त

11
मैंने किया git add -u FolderWithDeletedFiles/और यह वही हुआ जो मैं चाहता हूं, धन्यवाद
संसद

158

सभी मैन्युअल रूप से हटाई गई फ़ाइलों को आप उपयोग करने के लिए स्टेज कर सकते हैं:

git rm $(git ls-files --deleted)

इस आदेश में एक उपनाम जोड़ने के लिए git rm-deleted, चलाएँ:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
$ () संकेतन aparently विंडोज़ बैश कंसोल में मौजूद नहीं है, जिसके कारणunknown option `deleted)
Félix Gagnon-Grenier

2
मुझे नहीं लगता कि अगर आपके रास्ते में जगह है, तो यह काम करता है। कम से कम, यह मेरे सिस्टम (zsh के साथ) पर नहीं है।
विली शिप्ली

3
पूरी तरह से मेरे लिए काम किया! ठीक वैसा ही किया जैसा मुझे चाहिए था। विशाल सराहना यहाँ!
RedSands

खिड़कियों मेंfor /F %I in ('git ls-files --deleted') do git add -u %I
eis

3
यह रिक्त स्थान के साथ फ़ाइल नाम के लिए काम नहीं करता है, 'git add -u' जरूरत पड़ने पर करता है।
J-Dizzle

33

सभी तैयार हटाई गई फ़ाइलों को जोड़ने के लिए

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

धन्यवाद जाँच करने के लिए सुनिश्चित करें

git status

आप जाने के लिए तैयार हैं


5
पुष्टि करता है कि यह काम करता है। मुझे लगता है कि सबक यहाँ हालांकि ऐसा नहीं है rm <file>, बल्किgit rm <file>
DanGordon

1
FYI करें: रिक्त स्थान काटने का कारण बनता है अगर किसी भी पथ में रिक्त स्थान है
davis

1
यह रिक्त स्थान के साथ फ़ाइल नाम के लिए काम नहीं करता है, 'git add -u' जरूरत पड़ने पर करता है।
J-Dizzle

मेरे लिए पूरी तरह से काम करता है git version 2.15.2 (Apple Git-101.1)
कलोब तौलिएन

लिनक्स कंसोल पर पूरी तरह से काम करता है!
अहमद AMMOURI

8

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

git rm -r --cached -- "path/to/directory"

हटाए गए निर्देशिका को चरणबद्ध करने के लिए।



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