Git में अनटैक की गई फ़ाइलों को कैसे हटाएं?


110

मैं एक शाखा पर काम कर रहा हूं, "प्रयोगात्मक" शाखा कहता हूं जिसे मैं अपनी मास्टर शाखा से शाखा देता हूं। फिर, मैं प्रयोगात्मक शाखा में एक उपयोगकर्ता मॉडल उत्पन्न करता हूं, लेकिन उन्हें अभी तक सूचकांक में नहीं जोड़ता है।

यदि मुझे अपनी प्रयोगात्मक शाखा में हाल ही में जोड़ी गई फ़ाइलों के सभी परिवर्तनों को छोड़ना है तो मुझे क्या करना होगा? नीचे दी गई फ़ाइलों के रूप में सूचीबद्ध हैं:

$ git status
 On branch new_chick
 Untracked files:
   (use "git add <file>..." to include in what will be committed)

       .project
       app/models/user.rb
       db/migrate/
       test/fixtures/users.yml
       test/unit/user_test.rb

मैंने उन सभी परिवर्तनों को पूर्ववत् करने के लिए "git reset --hard" चलाने की कोशिश की, लेकिन ऊपर की सभी फाइलें अभी भी दिखती हैं।

किसी ने मुझ पर कुछ प्रकाश डाला कृपया?


जवाबों:


220

अनट्रैक की गई फ़ाइलों / निर्देशिकाओं को हटाने के लिए:

git clean -fdx

-फ - बल

-d - निर्देशिका भी

-x - उपेक्षित फ़ाइलों को भी हटा दें (यदि आप उपेक्षित फ़ाइलों को हटाना नहीं चाहते हैं तो इसका उपयोग न करें)


54
Add -n to
Preview

8
यह भी खूब रही! सिवाय इसके कि यह उन कॉन्फ़िगरेशन फ़ाइलों को भी हटा देगा जिन्हें आपने जानबूझकर .गितिग्नोर में नजरअंदाज कर दिया था, लेकिन फिर भी आपको अपने स्थानीय विकास परिवेश की आवश्यकता होगी। आप इंटरैक्टिव मोड के लिए अतिरिक्त -i के साथ समान कमांड का उपयोग कर सकते हैं जैसे: git clean -fdxi और यह आपको संकेत देगा कि आप किन फ़ाइलों को हटाना चाहते हैं।
moeabdol

5
यह बहुत अच्छा है, लेकिन आप उपयोगकर्ताओं को नोटिस के -xसाथ उपयोग करने के लिए चेतावनी के साथ जोड़ना चाह सकते हैं क्योंकि यह स्थायी रूप से फ़ाइलों को हटा देगा। या -n@Druska द्वारा वर्णित के रूप में उपयोग करें
लैकोस्टेनिकोडर

3
-xअभी भी उपयोग नहीं किया गया है। -प्रोजेक्ट और अन्य कॉन्फिग फाइल डिलीट हो गई हैं। अंतिम निर्देशिका से रेपो को फिर से एक नई निर्देशिका में खींचना था।
टाइमकीपर

2
मुझे लगता है कि आपको सूचित करना होगा कि यह कमांड संभावित रूप से खतरनाक है क्योंकि यह वांछित फ़ाइलों को हटा सकता है !!!
डेविद

20

उपयोगकर्ता इंटरैक्टिव दृष्टिकोण:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

अनदेखा फ़ाइलों के लिए निर्देशिका -x के
लिए बल
-d के लिए इंटरैक्टिव -f के लिए -i
(यदि आवश्यक हो तो जोड़ें)

ध्यान दें: ऐड -एन या --dry-run सिर्फ यह जाँचने के लिए कि यह क्या करेगा।


17

वे अनट्रैक फाइलें हैं। इसका मतलब यह है कि उन्हें ट्रैक नहीं है। यह केवल उन्हें सूचीबद्ध कर रहा है क्योंकि वे फ़ाइल को अनदेखा नहीं कर रहे हैं। चूंकि वे गिट द्वारा ट्रैक नहीं किए जा रहे हैं, git resetइसलिए उन्हें स्पर्श नहीं किया जाएगा।

यदि आप सभी अनट्रेक्ट की गई फ़ाइलों को उड़ाना चाहते हैं, तो सबसे सरल तरीका है git clean -f( git clean -nयदि आप यह देखना चाहते हैं कि यह वास्तव में किसी चीज को डिलीट किए बिना क्या नष्ट होगा)। अन्यथा, आप केवल उन फ़ाइलों को हटा सकते हैं जिन्हें आप हाथ से नहीं चाहते हैं।


5

अनियोजित फ़ाइलों को हटाने के लिए:

git clean -f

अनुपयोगी निर्देशिकाओं को हटाने के लिए, उपयोग करें:

git clean -f -d

किसी भी कार्डियक अरेस्ट को रोकने के लिए, उपयोग करें

git clean -n -f -d


कोई भी "कार्डिएक अरेस्ट" Kul
ऋषि कुलश्रेष्ठ

2

आप स्थानीय रेपो की पिछली स्थिति में दूसरे तरीके से भी लौट सकते हैं:

  1. चरणबद्ध क्षेत्र के साथ अनट्रैक की गई फ़ाइलों को जोड़ें git add
  2. के साथ स्थानीय रेपो की पिछली स्थिति में लौटें git reset --hard


0

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

$ git चेकआउट फ़ाइलपथ / फ़ाइल नाम

filepath - वह स्थान जहाँ से मैंने git bash किया था। तब जब मैंने लेटेस्ट बदलाव उपलब्ध थे


0

git cleanअच्छी तरह से काम करते हुए , मैं अभी भी गिट रेपो को साफ करने के लिए अपनी खुद की स्क्रिप्ट का उपयोग करना उपयोगी मानता हूं, इसके कुछ फायदे हैं।

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

यह उस सूची को मैन्युअल रूप से फ़िल्टर करने की अनुमति देता है जो उस समय आती है जब ऐसी फ़ाइल प्रकार होती हैं जिन्हें आप साफ़ नहीं करना चाहते हैं (और कारण नहीं है)।


git_clean.sh


#!/bin/bash
readarray -t -d '' FILES < <(
    git ls-files -z --other --directory |
        grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi

echo "Dirty files:"
printf '  %s\n' "${FILES[@]}"

DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
       rm -rfv "$f"
    done
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.