जीआईटी रीसेट - हार्ड हेड अनटैक की गई फ़ाइलों को पीछे छोड़ देता है


584

जब मैं दौड़ता हूं git reset --hard HEAD, तो जैसा आपने समझा था, उसके एक प्राचीन संस्करण पर रीसेट करना चाहिए। दुर्भाग्य से, यह चारों ओर पड़ी हुई फ़ाइलों को छोड़ देता है, एक git statusअनकैप्ड फ़ाइलों की एक बड़ी सूची दिखाता है।

आप कैसे बताते हैं "बस इसे फिर से लाएं, जो पिछले पुल में था, कुछ ज्यादा नहीं, कुछ कम नहीं"


44
git reset --hardअपने सूचकांक को रीसेट करता है और ट्रैक की गई फाइलों को वापस उसी स्थिति में लौटाता है, जैसा कि वे HEAD में हैं। यह अकेली फाइल को छोड़ देता है।
पंद्रह

जवाबों:


903

आपको git clean -f -dअपनी कार्यशील प्रतिलिपि में अनट्रैक की गई फ़ाइलों और निर्देशिकाओं से छुटकारा पाने के लिए उपयोग करना होगा।

यदि आपको सभी गिट सबमॉडल सहित मास्टर को संपूर्ण रिपॉजिटरी रीसेट करने की आवश्यकता है, तो इस स्क्रिप्ट को चलाएं:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status

56
इसके अलावा, -xयदि आप अपनी .itignored फ़ाइलों को निकालना चाहते हैं और एक प्राचीन स्थिति में वापस आ सकते हैं।
jtdubs

44
-nपरीक्षण में जोड़ें पहले हटा दिया जाएगा। सभी को एक तर्क में -dfn
मिलाएं

31
मेरी आम आज्ञा git clean -qfdxयहाँ है। सब कुछ हटाओ और चुपचाप करो।
आर्गेसर

3
-d -fके -dffलिए दो बार decalred किया जा सकता है -d -f -f, यह संरक्षित अनट्रैक निर्देशिकाओं सहित सभी अनट्रैक निर्देशिकाओं को हटा देगा।
थोरसुमोनर

3
@BKSpurgeon: हां, यह फाइलों को हटा देता है। आप के साथ क्या मतलब है »मैं बिना फ़ाइलों के चाहते हैं जैसे वे पहले थे«? Git के पास मौजूद फ़ाइलों के बारे में कुछ भी नहीं पता है, सिवाय इसके कि वे मौजूद हैं। यह इन फ़ाइलों के कई संस्करणों को ट्रैक नहीं करता है (क्योंकि वे अनट्रैक किए गए हैं )।
8

60

यदि आपके पास ऐसी फाइलें हैं जिन्हें आप अभी भी रखना चाहते हैं:

git clean -di एक इंटरेक्टिव क्लीन करेगा जो आपको केवल उन फाइलों / डायरियों को हटाने की अनुमति देता है जिन्हें आप अब और नहीं चाहते हैं।


48
git reset --hard && git clean -dfx

या, zsh एक 'gpristine' उपनाम प्रदान करता है:

alias gpristine='git reset --hard && git clean -dfx'

जो वास्तव में आसान है।

यदि एक कांटेदार रेपो पर काम कर रहे हैं, तो उदाहरण के लिए, सही रेपो / शाखा से प्राप्त करना और रीसेट करना सुनिश्चित करें:

git fetch upstream && git reset --hard upstream/master && git clean -df

8
माफी अगर यह एक सुरक्षित आदेश नहीं है - मैं सुरक्षित होने की कोशिश नहीं कर रहा था, मैं सवाल का जवाब देने की कोशिश कर रहा था। क्या आप इस पर टिप्पणी कर सकते हैं कि क्या यह प्रश्न का उत्तर देता है?
jjnevis

3
यह अच्छी तरह से काम करता है और इसे git IMHO में बनाया जाना चाहिए (हालांकि मुझे यकीन नहीं है कि मैं -x नियमित रूप से उपयोग करूंगा)। इसलिए कई बार मैं एक स्थानीय परियोजना पर काम कर रहा हूं, अभी तक गीथब आदि के साथ समन्वयित नहीं किया गया है, और आईडीई 'पूर्ववत' राज्य से परे एक गड़बड़ रिफ्लेक्टर चला जाता है। मेरी वृत्ति अंतिम प्रतिबद्ध करने के लिए वापस जाने के लिए है, लेकिन इसके लिए गुगली करना आमतौर पर दंडात्मक प्रतिबद्धता के लिए जवाब देता है, आखिरी प्रतिबद्ध नहीं। मैं सबसे हाल के कमिट में वापस जाना चाहता हूं। यह वह करता है। हालांकि एक आसान तरीका होना चाहिए। धन्यवाद लिनुस! ;-)
डेल एंडरसन

5
यह खतरनाक है क्योंकि यह इस -xतरह से अनदेखा फ़ाइलों को हटा देता है जैसे कि आपने अभी-अभी रेपो पर क्लोन किया है। यदि आप चाहते हैं कि यह सही है। अगर आप सिर्फ अनट्रेक्टेड फाइल्स को डिलीट करना चाहते हैं , तो -xऑप्शन को हटाना अच्छे से काम करता है।
एमिल बर्जरॉन

2
भगवान के लिए धन्यवादgpristine
स्नोक्रैश

2
और इंटेलीज सेटिंग्स हटा देता है;)
कल्पेश सोनी

17

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

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
(यदि आवश्यक हो तो जोड़ें)

नोट: ऐड -एन या -ड्राइ-रन सिर्फ यह जांचने के लिए कि यह क्या करेगा।


4

आप उपयोग कर सकते हैं git stash। आपको निर्दिष्ट करना होगा --include-untracked, अन्यथा आप मूल समस्या को समाप्त कर देंगे।

git stash --include-untracked

तो बस अंतिम प्रविष्टि को रोक दें

git stash drop

आप उसके लिए एक आसान-डंडी उपनाम बना सकते हैं, और git wipeउदाहरण के लिए उसे कॉल कर सकते हैं :

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"

2

जिस कमांड को आप देख रहे हैं वह है git clean


4
अगली बार कृपया थोड़ा और विवरण / उदाहरण जोड़ें। जो कुछ भी उपयोगकर्ता को यह समझने में मदद करता है कि वह क्या करता है, और इस मामले में, क्या मापदंडों का उपयोग करना है।
रगड़

1

git-clean काम करने वाले पेड़ में अनकही फ़ाइलों को हटाने के लिए उपयोग करें। निम्नलिखित कुछ विकल्प हैं (संक्षिप्त में) जो git cleanकमांड के साथ उपयोग कर सकते हैं ।

-dजब कोई पथ निर्दिष्ट न हो तो उपयोग करें। अतः अनुत्तरित निर्देशिकाओं में पुनरावृत्ति को हटा दें।

-f/--force नेस्टेड अनट्रैक फ़ाइलों को हटाने के लिए।

-i/--interactive दिखाएँ कि क्या किया जाएगा और अंतःक्रियात्मक रूप से फ़ाइलों को साफ़ करें।

-n/--dry-run दिखाओ कि बिना कुछ निकाले क्या होगा।

-x फाइलों को नजरअंदाज करें

उदाहरण: git clean -f -d-> किसी भी उपनिर्देशिका में वर्तमान निर्देशिका में सभी अनटैक की गई फ़ाइलों को हटा दें।


-16

आपने किसी बिंदु पर एक नरम रीसेट किया होगा, आप इस समस्या को हल कर सकते हैं

git add .
git reset --hard HEAD~100
git pull

7
मुझे नहीं लगता कि यह वही है जो ओपी चाहता था। या तो अन्य जवाब वास्तव में इसे ठीक करने का तरीका दिखाते हैं।
एवरी

1
अगर आपके पास जोड़ने के लिए बहुत सारी फाइलें हैं तो यह धीमा भी हो सकता है।
डेविन जी रोड

4
पूरी तरह से असंबंधित।
अज़ीम हसनी

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