git download - मैं गिट में अस्थिर परिवर्तनों को कैसे छोड़ूं?




github g. (25)

आप अपना खुद का उपनाम बना सकते हैं जो वर्णन करता है कि इसे वर्णनात्मक तरीके से कैसे किया जाए।

मैं परिवर्तनों को त्यागने के लिए अगले उपनाम का उपयोग करता हूं।

काम करने वाले पेड़ में एक (सूची) फ़ाइल में परिवर्तनों को छोड़ दें

discard = checkout --

फिर आप सभी परिवर्तनों को त्यागने के बगल में इसका उपयोग कर सकते हैं:

discard .

या सिर्फ एक फाइल:

discard filename

अन्यथा, यदि आप सभी परिवर्तनों को छोड़ना चाहते हैं और अनचाहे फ़ाइलों को भी छोड़ना चाहते हैं, तो मैं चेकआउट के मिश्रण का उपयोग करता हूं और साफ़ करता हूं:

काम करने वाले पेड़ में बदलावों और अनचाहे फ़ाइलों को साफ और त्यागें

cleanout = !git clean -df && git checkout -- .

तो उपयोग अगले के रूप में सरल है:

cleanout

अब अगले गिथब रेपो में उपलब्ध है जिसमें बहुत सारे उपनाम हैं:

मैं अपनी कार्यशील प्रति में परिवर्तनों को कैसे हटा सकता हूं जो इंडेक्स में नहीं हैं?


ऐसा लगता है कि पूरा समाधान है:

git clean -df
git checkout -- .

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


यदि सभी स्टेज्ड फाइलें वास्तव में प्रतिबद्ध की गई थीं, तो शाखा को केवल तीन माउस क्लिक के साथ अपने जीयूआई से रीसेट किया जा सकता है: शाखा , रीसेट , हां !

तो अवांछित स्थानीय परिवर्तनों को वापस करने के लिए मैं अक्सर अभ्यास में क्या करता हूं, सभी अच्छी चीजें करने के लिए, और फिर शाखा को रीसेट करना है।

यदि अच्छी चीजें एक ही प्रतिबद्धता में प्रतिबद्ध होती हैं, तो आप अंततः चरणबद्ध या अस्थिर होने के लिए "अंतिम प्रतिबद्धता में संशोधन" का उपयोग कर सकते हैं यदि आप आखिरकार इसे थोड़ा अलग करना चाहते हैं।

यह तकनीकी समाधान नहीं हो सकता है जिसे आप अपनी समस्या के लिए देख रहे हैं, लेकिन मुझे यह एक बहुत ही व्यावहारिक समाधान मिल रहा है। यह आपको चुनिंदा परिवर्तनों को चुनिंदा रूप से हटाने, उन परिवर्तनों को रीसेट करने की अनुमति देता है जिन्हें आप पसंद नहीं करते हैं और जो आप करते हैं उन्हें रखते हुए।

तो संक्षेप में, मैं बस प्रतिबद्ध करता हूं , शाखा रीसेट करता हूं , और अंतिम प्रतिबद्धता में संशोधन करता हूं ।


एक और तेज तरीका है:

git stash save --keep-index --include-untracked

यदि आप इसके बारे में पूरी तरह से नहीं बनना चाहते हैं तो आपको शामिल करने की आवश्यकता नहीं है --include-untracked

उसके बाद, यदि आप चाहें तो git stash drop कमांड के साथ उस स्टैश को git stash drop सकते हैं।


cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

जैसे ही आप गिट स्थिति टाइप करते हैं , (कार्यशील निर्देशिका में परिवर्तनों को त्यागने के लिए "गिट चेकआउट - ..." का उपयोग करें) दिखाया गया है।

उदाहरण के लिए git checkout -- .


ऊपर दिए गए सभी समाधानों का प्रयास किया लेकिन अभी भी नई, अस्थिर फ़ाइलों से छुटकारा नहीं मिल सका।

उन नई फ़ाइलों को हटाने के लिए git clean -f का उपयोग करें - हालांकि सावधानी के साथ! बल विकल्प नोट करें।


नई फाइलों से छुटकारा पाने का एक और तरीका जो कि गिट क्लीन-डीएफ से अधिक विशिष्ट है (यह आपको कुछ फ़ाइलों से छुटकारा पाने की अनुमति देगा), पहले इंडेक्स में नई फाइलें जोड़ना है, फिर स्टैश करें, फिर ड्रॉप करें छिपाया।

यह तकनीक तब उपयोगी होती है जब किसी कारण से, आप कुछ सामान्य तंत्र (जैसे आरएम) द्वारा आसानी से सभी अनचाहे फ़ाइलों को हटा नहीं सकते हैं।


महज प्रयोग करें:

git stash -u

किया हुआ। आसान।

यदि आप वास्तव में अपने स्टैच स्टैक की परवाह करते हैं तो आप git stash drop साथ अनुसरण कर सकते हैं। लेकिन उस समय आप (Mariusz Nowak से) का उपयोग बंद कर रहे हैं:

git checkout -- .
git clean -df

फिर भी, मुझे git stash -u पसंद है - यह सबसे अच्छा है क्योंकि यह केवल एक कमांड में सभी ट्रैक किए गए और अनचाहे परिवर्तनों को "त्याग देता है"। फिर भी git checkout -- . केवल ट्रैक किए गए परिवर्तनों को छोड़ देता है, और git clean -df केवल git clean -df परिवर्तनों को छोड़ देता है ... और दोनों कमांड टाइप करना बहुत अधिक काम है :)


मेरी राय में,

git clean -df

चाल करना चाहिए गिट क्लीन पर गिट दस्तावेज के अनुसार

गिट-क्लीन - काम करने वाले पेड़ से अनचाहे फ़ाइलों को हटा दें

विवरण

वर्तमान निर्देशिका से शुरू होने वाले संस्करण नियंत्रण के अंतर्गत नहीं होने वाली फ़ाइलों को दोबारा हटाकर काम कर रहे पेड़ को साफ़ करता है।

आम तौर पर, गिट को अज्ञात फाइलें हटा दी जाती हैं, लेकिन यदि -x विकल्प निर्दिष्ट किया गया है, तो अनदेखा फ़ाइलों को भी हटा दिया जाता है। यह, उदाहरण के लिए, सभी निर्माण उत्पादों को हटाने के लिए उपयोगी हो सकता है।

यदि कोई वैकल्पिक ... तर्क दिए जाते हैं, केवल वे पथ प्रभावित होते हैं।

विकल्प

-d अनचाहे फ़ाइलों को जोड़ने के अलावा अनचाहे निर्देशिका हटाएं। यदि एक अनचाहे निर्देशिका को एक अलग गिट भंडार द्वारा प्रबंधित किया जाता है, तो इसे डिफ़ॉल्ट रूप से हटाया नहीं जाता है। यदि आप वास्तव में ऐसी निर्देशिका को हटाना चाहते हैं तो -f विकल्प दो बार उपयोग करें।

-f --force अगर गिट कॉन्फ़िगरेशन वैरिएबल क्लीन.रेक्वायरफोर्स गलत पर सेट नहीं है, तो गिट क्लीन को तब तक चलाने से इंकार कर दिया जाएगा जब तक दिया गया -f, -n या -i।


यह वर्तमान निर्देशिका के लिए मौजूदा इंडेक्स को जांचता है, वर्तमान निर्देशिका से फ़ाइलों में सभी परिवर्तनों को नीचे फेंक देता है।

git checkout .

या यह इंडेक्स से सभी फाइलों को जांचता है, काम कर रहे पेड़ फ़ाइलों को ओवरराइट करता है।

git checkout-index -a -f

यदि आप सबमिशन के मामले में हैं और कोई अन्य समाधान कार्य करने का प्रयास नहीं करते हैं:

  • यह जांचने के लिए कि समस्या क्या है (शायद एक "गंदा" मामला) उपयोग करें:

    git diff

  • छिपाने के लिए

    git submodule update


कोई फर्क नहीं पड़ता कि आपका रेपो किस राज्य में है, आप हमेशा किसी भी पिछली प्रतिबद्धता पर रीसेट कर सकते हैं:

git reset --hard <commit hash>

यह उस प्रतिबद्धता के बाद किए गए सभी परिवर्तनों को त्याग देगा।


यदि आप अस्थिर परिवर्तनों को रखने में रुचि नहीं रखते हैं (विशेष रूप से यदि चरणबद्ध परिवर्तन नई फाइलें हैं), तो मुझे यह आसान लगता है:

git diff | git apply --reverse

आप गिट स्टैश का उपयोग कर सकते हैं - अगर कुछ गलत हो जाता है, तो भी आप स्टैश से वापस आ सकते हैं। यहां कुछ अन्य उत्तरों के समान, लेकिन यह सभी अस्थिर फ़ाइलों को भी हटा देता है और सभी अस्थिर डिलीट भी हटाता है:

git add .
git stash

यदि आप जांचते हैं कि सब कुछ ठीक है, तो छिड़काव फेंक दें:

git stash drop

git clean साथ बिलाल मकसूद का जवाब भी मेरे लिए काम करता था, लेकिन छेड़छाड़ के साथ मेरा अधिक नियंत्रण होता है - अगर मैं गलती से sth करता हूं, तो भी मैं अपने बदलाव वापस कर सकता हूं

अद्यतन करें

मुझे लगता है कि 1 और बदलाव है (पता नहीं क्यों यह मेरे लिए पहले काम किया):

git add . -A git add . -A git add . बजाय git add .

बिना हटाए गए फाइलों का मंचन नहीं किया जाएगा


समाधानों में से कोई भी काम नहीं करता है अगर आपने फ़ाइल की अनुमतियों को अभी बदल दिया है (यह डॉस / विंडोज़ पर है)

Mon 23/11/2015-15:16:34.80 C:\...\work\checkout\slf4j+> git status
On branch SLF4J_1.5.3
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   .gitignore
        modified:   LICENSE.txt
        modified:   TODO.txt
        modified:   codeStyle.xml
        modified:   pom.xml
        modified:   version.pl

no changes added to commit (use "git add" and/or "git commit -a")

Mon 23/11/2015-15:16:37.87 C:\...\work\checkout\slf4j+> git diff
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/LICENSE.txt b/LICENSE.txt
old mode 100644
new mode 100755
diff --git a/TODO.txt b/TODO.txt
old mode 100644
new mode 100755
diff --git a/codeStyle.xml b/codeStyle.xml
old mode 100644
new mode 100755
diff --git a/pom.xml b/pom.xml
old mode 100644
new mode 100755
diff --git a/version.pl b/version.pl
old mode 100644
new mode 100755

Mon 23/11/2015-15:16:45.22 C:\...\work\checkout\slf4j+> git reset --hard HEAD
HEAD is now at 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore

Mon 23/11/2015-15:16:47.42 C:\...\work\checkout\slf4j+> git clean -f

Mon 23/11/2015-15:16:53.49 C:\...\work\checkout\slf4j+> git stash save -u
Saved working directory and index state WIP on SLF4J_1.5.3: 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore
HEAD is now at 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore

Mon 23/11/2015-15:17:00.40 C:\...\work\checkout\slf4j+> git stash drop
Dropped refs/[email protected]{0} (cb4966e9b1e9c9d8daa79ab94edc0c1442a294dd)

Mon 23/11/2015-15:17:06.75 C:\...\work\checkout\slf4j+> git stash drop
Dropped refs/[email protected]{0} (e6c49c470f433ce344e305c5b778e810625d0529)

Mon 23/11/2015-15:17:08.90 C:\...\work\checkout\slf4j+> git stash drop
No stash found.

Mon 23/11/2015-15:17:15.21 C:\...\work\checkout\slf4j+> git checkout -- .

Mon 23/11/2015-15:22:00.68 C:\...\work\checkout\slf4j+> git checkout -f -- .

Mon 23/11/2015-15:22:04.53 C:\...\work\checkout\slf4j+> git status
On branch SLF4J_1.5.3
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   .gitignore
        modified:   LICENSE.txt
        modified:   TODO.txt
        modified:   codeStyle.xml
        modified:   pom.xml
        modified:   version.pl

no changes added to commit (use "git add" and/or "git commit -a")

Mon 23/11/2015-15:22:13.06 C:\...\work\checkout\slf4j+> git diff
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/LICENSE.txt b/LICENSE.txt
old mode 100644
new mode 100755
diff --git a/TODO.txt b/TODO.txt
old mode 100644
new mode 100755
diff --git a/codeStyle.xml b/codeStyle.xml
old mode 100644
new mode 100755
diff --git a/pom.xml b/pom.xml
old mode 100644
new mode 100755
diff --git a/version.pl b/version.pl
old mode 100644
new mode 100755

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

Mon 23/11/2015-15:25:43.79 C:\...\work\checkout\slf4j+> git status -s | egrep "^ M" | cut -c4- | for /f "usebackq tokens=* delims=" %A in (`more`) do chmod 644 %~A

Mon 23/11/2015-15:25:55.37 C:\...\work\checkout\slf4j+> git status
On branch SLF4J_1.5.3
nothing to commit, working directory clean

Mon 23/11/2015-15:25:59.28 C:\...\work\checkout\slf4j+>

Mon 23/11/2015-15:26:31.12 C:\...\work\checkout\slf4j+> git diff


चूंकि कोई जवाब सटीक विकल्प संयोजन का सुझाव देता है जिसका मैं उपयोग करता हूं, यहां यह है:

git clean -dfx
git checkout .

उपयोग किए गए git clean विकल्पों के लिए यह ऑनलाइन सहायता टेक्स्ट है:

-d

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

-f

यदि गिट कॉन्फ़िगरेशन वेरिएबल clean.requireForce को false सेट नहीं किया गया false , तो गिट क्लीन फाइलों या निर्देशिकाओं को हटाने से इनकार कर देगा जब तक -f , -n , या -i । गिट .git उपनिर्देशिका या फ़ाइल के भीतर निर्देशिका को हटाने से इंकार कर देगा, जब तक कि कोई दूसरा- -f दिया जाता है।

-x

$GIT_DIR/info/exclude (प्रति निर्देशिका) और $GIT_DIR/info/exclude से अनदेखा नियमों का उपयोग न करें, लेकिन अभी भी विकल्पों के साथ दिए गए अनदेखा नियमों का उपयोग करें। यह बिल्ड उत्पादों सहित सभी अनचाहे फ़ाइलों को हटाने की अनुमति देता है। स्वच्छ निर्माण का परीक्षण करने के लिए एक प्राचीन कार्यशील निर्देशिका बनाने के लिए इसका उपयोग संभवतः git reset के साथ किया जा सकता है।

इसके अलावा, git checkout . रेपो की जड़ में किया जाना चाहिए।


मेरी पसंदीदा है

git checkout -p

यह आपको चुनिंदा रूप से हिस्सों को वापस करने देता है।

यह भी देखें:

git add -p

ऐसा करने का सबसे आसान तरीका इस आदेश का उपयोग करना है:

यह आदेश कार्य निर्देशिका में परिवर्तनों को त्यागने के लिए प्रयोग किया जाता है -

git checkout -- .

https://git-scm.com/docs/git-checkout

गिट कमांड में, अनचाहे फ़ाइलों को छेड़छाड़ का उपयोग करके हासिल किया जाता है:

git stash -u

http://git-scm.com/docs/git-stash


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

मुझे एक जैसी समस्या थी, शायद समान नहीं, और मुझे यह कहना दुखद है कि मेरा समाधान आदर्श नहीं है, लेकिन यह अंततः प्रभावी है।

मुझे अक्सर इस तरह गिट स्टेटस संदेश होंगे (कम से कम 2/4 फाइलें शामिल हैं):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

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

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


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

git checkout -- .

एक विशिष्ट फ़ाइल उपयोग के लिए:

git checkout path/to/file/to/revert

अंत में अवधि शामिल करना सुनिश्चित करें।


यह निर्देशिकाओं में भी काम करता है; सामान्य गिट अनुमतियों के बाहर।

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

हाल ही में मुझे हुआ


जब आप किसी और को छेड़छाड़ करना चाहते हैं:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

टिप्पणी के रूप में [संपादित करें], यह स्टैश नाम देने के लिए संभव है। खैर, अगर आप अपना स्टैश साझा करना चाहते हैं तो इसका इस्तेमाल करें;)


git clean -df

वर्तमान निर्देशिका से शुरू होने वाले संस्करण नियंत्रण के अंतर्गत नहीं होने वाली फ़ाइलों को दोबारा हटाकर काम कर रहे पेड़ को साफ़ करता है।

-d : अनचाहे फ़ाइलों के अलावा अनचाहे निर्देशिका हटाएं

-f : बल ( clean.requireForce सेटिंग के आधार पर आवश्यक नहीं हो सकता है)

रन git help clean मैनुअल देखने के लिए git help clean


रिमोट शाखा के नाम से बस git checkout चलाएं। गिट स्वचालित रूप से एक स्थानीय शाखा बना देगा जो रिमोट को ट्रैक करता है:

git fetch
git checkout test

हालांकि, अगर वह शाखा नाम एक से अधिक रिमोट में पाया जाता है, तो यह काम नहीं करेगा क्योंकि गिट को यह नहीं पता कि किस का उपयोग करना है। उस स्थिति में आप या तो उपयोग कर सकते हैं:

git checkout --track origin/test

या

git checkout -b test origin/test

2.19 9 में, गिट ने checkout.defaultRemote कॉन्फ़िगरेशन सीखा, जो इस तरह की अस्पष्टता को हल करते समय डिफ़ॉल्ट रूप से दूरस्थ को निर्दिष्ट करता है।







git