स्थानीय गिट परिवर्तनों को हटाने के विभिन्न तरीके


625

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

संक्षेप में, मुझे अपने स्थानीय परिवर्तनों को हटाने के लिए निम्नलिखित दो आदेश देने थे

git checkout .

git clean -f

मेरा सवाल यह है कि,

(१) क्या यह स्थानीय परिवर्तनों से छुटकारा पाने का सही तरीका है, या कृपया मुझे सही दृष्टिकोण की जानकारी दें।

(२) जब हम उपयोग करते हैं तो git reset --hardमैं इस कमांड के बिना भी रीसेट करने में सक्षम हूं

धन्यवाद

* समाधान: मेजर एडिट (ओं): 03/26: * अस्पष्ट विशिष्ट शब्दावली के साथ अस्पष्ट शब्दों में से कई को बदला गया [ट्रैक / अनट्रेंड / स्टेज्ड / अनस्टेड]

जब हम स्थानीय परिवर्तन करते हैं तो केवल तीन श्रेणियां हो सकती हैं:

टाइप 1. ट्रैक की गई फ़ाइलें

टाइप 2. अनस्ट्रेड ट्रैक्ड फाइल्स

टाइप 3. अनस्ट्रेड अनट्रेक्ड फाइल्स उर्फ ​​अनट्रैकड फाइल्स

  • मंचन - जिन्हें मंचन क्षेत्र में ले जाया जाता है / सूचकांक में जोड़ा जाता है
  • ट्रैक की गई - संशोधित फ़ाइलें
  • अनट्रैकेड - नई फाइलें। हमेशा अस्थिर रहता है। यदि मंचन किया जाता है, तो इसका मतलब है कि वे ट्रैक किए गए हैं।

प्रत्येक कमांड क्या करती है:

  1. git checkout . - बिना ट्रैक की गई फ़ाइलों को ही हटाता है [टाइप 2]

  2. git clean -f - हटाए गए अनट्रक्क्ड फ़ाइलों को केवल [टाइप 3] हटाता है

  3. git reset --hard - हटाए गए और हटाए गए ट्रैक न किए गए फ़ाइलों को केवल [टाइप 1, टाइप 2] हटा दिया जाता है।

  4. git stash -u - सभी परिवर्तनों को हटाता है [टाइप 1, टाइप 2, टाइप 3]

निष्कर्ष:

यह स्पष्ट है कि हम या तो उपयोग कर सकते हैं

(1) combination of `git clean -f` and `git reset --hard` 

या

(2) `git stash -u`

वांछित परिणाम प्राप्त करने के लिए।

नोट: स्ट्रैसिंग, क्योंकि शब्द का अर्थ है 'स्टोर (कुछ) सुरक्षित और गुप्त रूप से एक निर्दिष्ट स्थान पर।' यह हमेशा उपयोग करके पुनर्प्राप्त किया जा सकता है git stash pop। इसलिए उपरोक्त दो विकल्पों के बीच चयन करना डेवलपर की कॉल है।

धन्यवाद क्रिस्टोफ और फ्रेडरिक शॉनिंग।

संपादित करें: ०३/२27

मुझे लगा कि यह ' सावधान ' नोट डालने लायक हैgit clean -f

git clean -f

वहां से कोई वापसी नहीं है। उपयोग करें -nया --dry-runआप जो नुकसान करेंगे उसका पूर्वावलोकन करें।

यदि आप निर्देशिकाओं को हटाना भी चाहते हैं, तो दौड़ें git clean -f -d

यदि आप केवल अनदेखा फ़ाइलें निकालना चाहते हैं, तो चलाएँ git clean -f -X

यदि आप अनदेखा और गैर-अनदेखा फ़ाइलों को निकालना चाहते हैं, तो चलाएँ git clean -f -x

संदर्भ: अधिक पर git clean: वर्तमान गिट वर्किंग ट्री से स्थानीय (अनट्रैक) फ़ाइलों को कैसे निकालें?

संपादित करें: 05/20/15

इस शाखा पर सभी स्थानीय आवागमन को दूर करना [स्थानीय आवागमन को हटाना]

इस शाखा पर सभी स्थानीय कमिट्स को त्यागने के लिए, स्थानीय शाखा को इस शाखा के "अपस्ट्रीम" के समान बनाने के लिए, बस git reset --hard @{u}

संदर्भ: http://sethrobertson.github.io/GitFixUm/fixup.html

या git reset --hard origin/master[अगर स्थानीय शाखा है master]

नोट: 06/12/2015 यह अन्य SO प्रश्न का डुप्लिकेट नहीं है जिसे डुप्लिकेट के रूप में चिह्नित किया गया है। यह सवाल स्थानीय जीआईटी परिवर्तनों को हटाने का तरीका बताता है [एक फ़ाइल को हटा दें, मौजूदा फ़ाइल में जोड़े गए परिवर्तनों को हटा दें और विभिन्न दृष्टिकोण; जहां अन्य SO थ्रेड में केवल स्थानीय कमेंट को हटाने का पता होता है। यदि आपने कोई फ़ाइल जोड़ी है, और आप उसे अकेले निकालना चाहते हैं, तो अन्य SO थ्रेड इसके बारे में चर्चा नहीं करता है। इसलिए यह दूसरे की नकल नहीं है]

संपादित करें: ०६/२३/१५

रिमोट रिपॉजिटरी के लिए पहले से ही किए गए कमिट को वापस कैसे लाया जाए?

$ git revert ab12cd15

संपादित करें: 09/01/2015

स्थानीय शाखा और दूरस्थ शाखा से एक पिछली प्रतिबद्ध हटाएं

मामला: आपने बस अपनी स्थानीय शाखा में परिवर्तन शुरू किया और तुरंत दूरस्थ शाखा को धक्का दिया, अचानक एहसास हुआ, अरे नहीं! मुझे इस बदलाव की आवश्यकता नहीं है। अब क्या करें?

git reset --hard HEAD~1 [उस स्थानीय शाखा से हटाने के लिए]

git push origin HEAD --force[दोनों आदेशों को निष्पादित किया जाना चाहिए। दूरस्थ शाखा से हटाने के लिए]

क्या शाखा है? इसकी वर्तमान में जाँच की गई शाखा है।

संपादित करें 09/08/2015 - स्थानीय गिट मर्ज निकालें :

मैं एक नई कार्य शाखा के साथ masterशाखा और विलय की masterशाखा पर हूंphase2

$ git status
# On branch master

$ git merge phase2

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.

प्रश्न: कैसे इस मर्ज से छुटकारा पाने के लिए? कोशिश की git reset --hard और git clean -d -f दोनों काम नहीं किया।

केवल एक चीज जो नीचे काम करती है , वह है:

$ git reset --hard origin/master

या

$ git reset --hard HEAD~8

या

$ git reset --hard 9a88396f51e2a068bb7 [sha प्रतिबद्ध कोड - यह वह है जो आपके सभी मर्ज होने से पहले मौजूद था]


1
मुझे लगता है कि यह धागा आपके सवालों का जवाब दे सकता है: stackoverflow.com/questions/1146973/…
Saucier

1
"गिट स्टैश" आपके द्वारा किए गए किसी भी परिवर्तन को हटा देगा।
जॉन बलिन्जर

1
अच्छा सारांश! मैं एक और फ़ाइल श्रेणी जोड़ूंगा: "टाइप 4. उपेक्षित फ़ाइलें।" git stash -a[या --all] के रूप में अच्छी तरह से नजरअंदाज कर दिया और अनछुए फ़ाइलों को रोक देंगे। git clean -xउपेक्षित फ़ाइलों को भी साफ करेगा। git clean -Xकेवल उपेक्षित फ़ाइलों को साफ करेगा।
जेरी १०

2
@JavaDev आपका प्रश्न उत्तर की तरह अधिक था .. सराहना करते हैं कि आपने संपादन पर रखा और सभी उत्तरों को संकलित किया।
भावुक माथुर

1
धन्यवाद मैंने स्थानीय परिवर्तन को उलटने के लिए आपके सभी 4 कमांडों को चलाया
विन्सेन्ट तांग

जवाबों:


505

यह सब ठीक उसी पर निर्भर करता है जो आप पूर्ववत / वापस करने की कोशिश कर रहे हैं। उबे की कड़ी में पोस्ट पढ़कर शुरू करें । लेकिन एक उत्तर का प्रयास करने के लिए:

मुश्किल रीसेट

git reset --hard [HEAD]

ट्रैक की गई फ़ाइलों के लिए सभी चरणबद्ध और अस्थिर परिवर्तनों को पूरी तरह से हटा दें।

मैं खुद को अक्सर हार्ड रीसेटिंग का उपयोग करते हुए पाता हूं, जब मैं "जैसा सब कुछ पूर्ववत करता हूं, अगर मैंने रिमोट से पूर्ण री-क्लोन किया है"। आपके मामले में, जहां आप सिर्फ अपने रेपो प्रिस्टिन चाहते हैं, यह काम करेगा।

स्वच्छ

git clean [-f]

उन फ़ाइलों को निकालें जिन्हें ट्रैक नहीं किया गया है।

अस्थायी फ़ाइलों को हटाने के लिए, लेकिन पहले से ही ट्रैक की गई फ़ाइलों को चरणबद्ध और अस्थिर परिवर्तन रखें। ज्यादातर बार, मैं शायद बार-बार सफाई के बजाय एक अनदेखा-नियम बनाना समाप्त कर दूंगा - जैसे कि C # प्रोजेक्ट में बिन / obj फ़ोल्डर के लिए, जिसे आप आमतौर पर अंतरिक्ष बचाने के लिए अपने रेपो से बाहर करना चाहेंगे, या ऐसा कुछ।

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

गिट क्लीन फाइल को टच नहीं करेगा, जो पहले से ही ट्रैक किया जा रहा है।

चेकआउट "डॉट"

git checkout .

मैंने आपके पोस्ट को पढ़ने से पहले वास्तव में इस नोटेशन को कभी नहीं देखा था। मुझे इसके लिए दस्तावेज ढूंढने में मुश्किल समय आ रहा है (शायद कोई मदद कर सकता है), लेकिन थोड़ा सा खेलने से, ऐसा लगता है कि इसका मतलब है:

"मेरे काम करने के पेड़ में सभी परिवर्तन पूर्ववत करें"।

यानी ट्रैक की गई फ़ाइलों में बिना परिवर्तन किए हुए परिवर्तन पूर्ववत करें। यह स्पष्ट रूप से मंचन परिवर्तनों को नहीं छूता है और अकेले फाइल को छोड़ देता है।

stashing

कुछ जवाबों का उल्लेख है। जैसा कि शब्द का तात्पर्य है, आप संभवतः किसी चीज़ के बीच में जब आप किसी प्रतिबद्ध के लिए तैयार नहीं होते हैं, तब आप मंचन का उपयोग करेंगे, और आपको अस्थायी रूप से शाखाओं को स्विच करना होगा या किसी तरह अपने कोड के दूसरे राज्य में काम करना होगा, बाद में आपके "गन्दा लौटने के लिए"। डेस्क "। मुझे नहीं लगता कि यह आपके प्रश्न पर लागू होता है, लेकिन यह निश्चित रूप से आसान है।

सारांश में

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

अन्य सभी कमांड्स अधिक जटिल परिदृश्यों को सुविधाजनक बनाने के लिए हैं, जहां "पूर्ववत सामान" की एक ग्रैन्युलैरिटी की आवश्यकता है :)

मुझे लगता है, आपका प्रश्न # 1 कवर किया गया है, लेकिन अंत में, # 2 पर निष्कर्ष निकालने के लिए: जिस कारण से आपको कभी भी उपयोग करने की आवश्यकता नहीं मिली, git reset --hardयह था कि आपने कभी भी कुछ भी मंचन नहीं किया था। अगर आपने किसी बदलाव का मंचन किया होता, तो git checkout .git clean -fतो वह बदला होता।

आशा है कि यह कवर किया जाएगा।


उपयोग करने के पीछे के कारण के लिए धन्यवाद git reset --hard। मैंने इसे आज़माया, और हाँ .. अनुक्रमणिका (स्टेजिंग) में जोड़ी गई फ़ाइलों को हटा दिया गया था git reset --hard, और मुझे लगता है कि डिफ़ॉल्ट रूप से git reset --hardहै git reset --hard head। यह लिंक भी उपयोगी था gitready.com/beginner/2009/01/18/the-staging-area.html
स्पाइडरमैन

मैंने अपने जवाब में सुधार किया कि मुझे क्यों लगता git stash -uहै कि यहाँ सबसे अधिक समझ में आता है।
क्रिस्टोफ

2
आप दोनों को धन्यवाद। मैंने उत्तर को संक्षेप में दिया है और अपने प्रश्न में अंतःस्थापित किया है। क्रिस्टोफ मुझे पता है कि चलो git stash -uकरता है और कैसे यह पॉप, लेकिन फ्रेडरिक मुझे रीसेट कड़ी मेहनत और के संयोजन का उपयोग कर पता है git reset --hardऔर git clean -f, और क्यों नहीं stashकुछ परिस्थितियों में पसंद किया जाता है। अब कृपया मुझे यह चुनने में मदद करें कि मुझे कौन सा उत्तर देना चाहिए :), दोनों मेरे उत्तर हैं।
स्पाइडरमैन

3
.वर्तमान वर्किंग डायरेक्टरी का जिक्र करते हुए एक पाथसेप है, जो रेपो की जड़ हो सकता है। Git-scm.com से: git checkout [<tree-ish>] [--] <pathspec>…कार्यशील ट्री में नामित पथों को इंडेक्स फ़ाइल से या नामित <ट्री-ईश> से अपडेट करता है।
जेरी १०

3
यह कभी भी पर्याप्त जोर नहीं दिया जाता है कि दोनों git reset --hardऔर git clean -dfxजैसे विनाशकारी हैं । वैसे भी, कृपया headउत्तर में निचला भाग ठीक करें , यह HEADया तो अपरकेस होना चाहिए या बिल्कुल मौजूद नहीं होना चाहिए ।
पावेल Paमरदा

25

इस समय उत्तर जोड़ने का कारण:

अब तक मैं अपने प्रारंभिक प्रश्न के निष्कर्ष और 'उत्तर' को ही जोड़ रहा था, जिससे प्रश्न बहुत लंबा हो गया, इसलिए अलग उत्तर पर जा रहा था।

मैंने अधिक बार इस्तेमाल किए जाने वाले git कमांड को भी जोड़ा है जो मुझे git पर मदद करता है, किसी और की भी मदद करने के लिए।

मूल रूप से सभी स्थानीय आवागमन को साफ करने के लिए $ git reset --hardऔर $ git clean -d -f


पहला कदम इससे पहले कि आप कोई भी कमिट करें अपने यूज़रनेम और ईमेल को कॉन्फ़िगर करने के लिए है जो आपकी प्रतिबद्धता के साथ दिखाई देता है।

# वह नाम है जो आप अपने प्रतिबद्ध लेनदेन से संलग्न करना चाहते हैं

$ git config --global user.name "[name]"

# आपके द्वारा किए गए ईमेल को आपके द्वारा किए गए लेन-देन के लिए निर्धारित करता है

$ git config --global user.email "[email address]"

# वैश्विक कॉन्फिगर करें

$ git config --list

# दूरस्थ URL को लाइक करें

$ git remote show origin

#अवस्था जांच

git status

# सभी स्थानीय और दूरस्थ शाखाओं को देखें

git branch -a

# एक नई स्थानीय शाखा बनाएँ और इस शाखा पर काम करना शुरू करें

git checkout -b "branchname" 

या, यह एक दो कदम प्रक्रिया के रूप में किया जा सकता है

शाखा बनाएँ: git branch branchname इस शाखा पर काम करें:git checkout branchname

# स्थानीय परिवर्तन [दो कदम प्रक्रिया]: - फ़ाइल को इंडेक्स में जोड़ें, इसका मतलब है कि स्टेजिंग क्षेत्र में जोड़ना। फिर इस मंचन क्षेत्र में मौजूद फ़ाइलों को प्रतिबद्ध करें]

git add <path to file>

git commit -m "commit message"

# कुछ अन्य स्थानीय शाखा को देखें

git checkout "local branch name"

# स्थानीय शाखा में सभी परिवर्तन [मान लें कि आपने स्थानीय शाखा में कुछ परिवर्तन किए हैं जैसे नई फ़ाइल जोड़ना या मौजूदा फ़ाइल को संशोधित करना, या एक स्थानीय कमिट करना, लेकिन अब इसकी आवश्यकता नहीं है] git clean -d -fऔर git reset --hard [अगर स्थानीय शाखा में किए गए सभी स्थानीय परिवर्तनों को साफ करें स्थानीय प्रतिबद्धता]

git stash -u सभी परिवर्तनों को भी हटाता है

नोट: यह स्पष्ट है कि हम वांछित परिणाम प्राप्त करने के लिए या (1) संयोजन git clean –d –fऔर git reset --hard (2) git stash -uका उपयोग कर सकते हैं ।

नोट 1: स्ट्रैशिंग, शब्द का अर्थ है 'स्टोर (कुछ) सुरक्षित और गुप्त रूप से एक निर्दिष्ट स्थान पर।' इसे हमेशा git stash पॉप का उपयोग करके फिर से प्राप्त किया जा सकता है। इसलिए उपरोक्त दो विकल्पों के बीच चयन करना डेवलपर की कॉल है।

नोट 2: git reset --hardकार्यशील निर्देशिका परिवर्तनों को हटा देगा। इस आदेश को चलाने से पहले आप जो भी स्थानीय परिवर्तन करना चाहते हैं, उन्हें रोकना सुनिश्चित करें।

# मास्टर शाखा में स्विच करें और सुनिश्चित करें कि आप अद्यतित हैं।

git checkout master

git fetch [मूल / मास्टर पर अपडेट प्राप्त करने के लिए यह आवश्यक हो सकता है (आपके git config के आधार पर)

git pull

# मास्टर ब्रांच में फीचर ब्रांच को मर्ज करें।

git merge feature_branch

# मूल की स्थिति के लिए मास्टर शाखा को रीसेट करें।

git reset origin/master

# गलती से स्थानीय से एक फ़ाइल हटा दी गई है, इसे वापस कैसे प्राप्त करें? git statusहटाए गए संसाधन की पूरी फ़ाइलपथ प्राप्त करने के लिए एक करें

git checkout branchname <file path name>

बस!

#Mother मास्टर शाखा someotherbranch के साथ

git checkout master
git merge someotherbranchname

#rename स्थानीय शाखा

git branch -m old-branch-name new-branch-name

# शाखा स्थानीय शाखा

git branch -D branch-name

# सुदूरवर्ती शाखा

git push origin --delete branchname

या

git push origin :branch-name

# पहले से ही रिमोट रिपॉजिटरी में धकेल दिया गया एक कमिट

git revert hgytyz4567

जीआईटी का उपयोग करके पिछले कमिट से # क्रंच

git branch branchname <sha1-of-commit>

# सबसे हाल ही में किए गए कमिट का संदेश दें जो पहले ही रिमोट में धकेल दिया गया हो

git commit --amend -m "new commit message"
git push --force origin <branch-name>

# इस शाखा पर सभी स्थानीय आवागमन को हटाना [स्थानीय आवागमन को दूर करना]

इस शाखा पर सभी स्थानीय कमिट्स को त्यागने के लिए, स्थानीय शाखा को इस शाखा के "अपस्ट्रीम" के समान बनाने के लिए, बस

git reset --hard @{u}

संदर्भ: http://sethrobertson.github.io/GitFixUm/fixup.html या git reset --hard origin/master[अगर स्थानीय शाखा मास्टर है]

# पहले से ही एक दूरस्थ भंडार के लिए धक्का दिया एक प्रतिबद्ध वापस?

$ git revert ab12cd15

# स्थानीय शाखा और दूरस्थ शाखा से एक पिछली प्रतिबद्धता का पालन करें

उपयोग-मामला: आपने अभी - अभी अपनी स्थानीय शाखा में परिवर्तन किया और तुरंत दूरस्थ शाखा की ओर बढ़ा, अचानक एहसास हुआ, अरे नहीं! मुझे इस बदलाव की आवश्यकता नहीं है। अब क्या करें?

git reset --hard HEAD~1[कि स्थानीय शाखा से हटाने के लिए। 1 आपके द्वारा किए गए एक वचन को दर्शाता है]

git push origin HEAD --force[दोनों आदेशों को निष्पादित किया जाना चाहिए। दूरस्थ शाखा से हटाने के लिए]। वर्तमान में जाँच की गई शाखा को उस शाखा के रूप में संदर्भित किया जाएगा जहाँ आप यह कार्य कर रहे हैं।

# हाल ही में स्थानीय और दूरदराज के रेपो से कुछ हटाएं और उस कमिट को संरक्षित करें जो आप चाहते हैं। (स्थानीय और दूरदराज से आने वाला एक प्रकार का सम्मान)

मान लें कि आपके पास 3 कमिट हैं जिन्हें आपने ' develop' नामक दूरस्थ शाखा में धकेल दिया है

commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.

पुरानी कमिट पर वापस जाने के लिए (शाखा की स्थिति बदलने के लिए)

git log --oneline --decorate --graph // अपने सभी कमिट्स को देखने के लिए

git clean -d -f // किसी भी स्थानीय परिवर्तन को साफ करें

git reset --hard commitid-1 // इस प्रतिज्ञा पर स्थानीय रूप से श्रद्धा

git push -u origin +develop// इस अवस्था को रिमोट पर धकेलें। + बल पुश करने के लिए

# स्थानीय git मर्ज निकालें: केस: मैं मास्टर शाखा और मर्ज किए गए मास्टर ब्रांच के साथ एक नई वर्किंग ब्रांच चरण 2 में हूं

$ git status

ब्रांच मास्टर पर

$ git merge phase2 $ git status

ब्रांच मास्टर पर

आपकी शाखा 8 आवागमन के आधार पर 'मूल / मास्टर' से आगे है।

प्रश्न: इस स्थानीय गिट मर्ज से कैसे छुटकारा पाया जाए? कोशिश की git reset --hardऔर git clean -d -fदोनों काम नहीं किया। केवल एक चीज जो नीचे काम करती है , वह है:

$ जीआईटी रीसेट - भार उत्पत्ति / मास्टर

या

$ गिट रीसेट - भार ~ 8

या

$ git reset --hard 9a88396f51e2a068bb7 [sha प्रतिबद्ध कोड - यह वह है जो आपके सभी मर्ज होने से पहले मौजूद था]

# गंभीर gignignore फ़ाइल बनाएँ

touch .gitignore // मैक या यूनिक्स उपयोगकर्ताओं में फ़ाइल बनाएँ

नमूना .गरिग्नोर सामग्री:

.project
*.py
.settings

GIT की चीट शीट का संदर्भ लिंक: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf


1
दूरस्थ शाखा को हटाने की आपकी आज्ञा सर्वोत्तम नहीं हो सकती हैgit push origin :branch-nameहालाँकि आप उपयोग कर रहे हैं लेकिन मैं उपयोग करने की सलाह देता हूंgit push origin --delete branchname
vibs2006

सहमत हूं, मैंने आपके सुझाव से अपडेट किया, धन्यवाद @ vibs2006
स्पाइडरमैन

21

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

इसके बारे git stash -uमें आसान बात यह है कि

  1. यह संभवतः सबसे सरल (केवल?) एकल लक्ष्य है जो आपके लक्ष्य को पूरा करता है
  2. यदि आप अपना मन बदल लेते हैं, तो आप अपना सारा काम वापस ले लेते हैं git stash pop(यह ईमेल में एक ईमेल को हटाने जैसा है, जहाँ आप बाद में अपना दिमाग बदल सकते हैं)

जैसा कि आपके अन्य प्रश्न git reset --hardअनटैक की गई फ़ाइलों को नहीं निकालेंगे, इसलिए आपको अभी भी इसकी आवश्यकता होगी git clean -f। लेकिन git stash -uसबसे सुविधाजनक हो सकता है।


git reset --hardवास्तव में अनट्रैक की गई फ़ाइलों को नहीं हटाएगा , लेकिन यह अनट्रैक किए गए परिवर्तनों को हटा देगा , अर्थात फ़ाइलों में परिवर्तन, जो पहले से ही इंडेक्स में हैं। मुझे यकीन है कि आपका क्या मतलब है :)
फ्रेडरिक स्ट्रक-शोइंग

जब मैंने उपयोग किया git stash -u, तो मैंने git bash की प्रतिक्रिया देखी। "सहेजे गए {BRANCHNAME} पर निर्देशिका और सूचकांक राज्य WIP काम कर सकता है इस बचाया एक क्या हम प्रयोग कर पुनः प्राप्त कर सकता है हो सकता है। git stash pop
स्पाइडरमैन

आप दोनों को धन्यवाद। मैंने उत्तर को संक्षेप में दिया है और अपने प्रश्न में अंतःस्थापित किया है। क्रिस्टोफ मुझे पता है कि चलो git stash -uकरता है और कैसे यह पॉप, लेकिन फ्रेडरिक मुझे रीसेट कड़ी मेहनत और के संयोजन का उपयोग कर पता है git reset --hardऔर git clean -f, और क्यों नहीं stashकुछ परिस्थितियों में पसंद किया जाता है। अब कृपया मुझे यह चुनने में मदद करें कि मुझे कौन सा उत्तर देना चाहिए :), दोनों मेरे उत्तर हैं।
स्पाइडरमैन

लेकिन क्या होगा अगर कोई ऐसी फाइल है जिसे मैंने अपनी रिपॉजिटरी में जोड़ा है जिसे मैं ट्रैक नहीं करना चाहता? केवल मेरे रेपो में। अगर मैं इसे अनदेखा सूची में जोड़ता हूं तो मेरे पास एक .ignore फ़ाइल है जो सभी के साथ-साथ सभी को भी प्रभावित करेगी।
user20358 10

7

1. जब आप अपने स्थानीय परिवर्तनों को बिल्कुल नहीं रखना चाहते हैं।

git reset --hard

यह कमांड आपके स्थानीय रिपॉजिटरी से सभी स्थानीय परिवर्तनों को पूरी तरह से हटा देगा। पुल कमांड के दौरान संघर्ष से बचने का यह सबसे अच्छा तरीका है, केवल अगर आप अपने स्थानीय परिवर्तनों को बिल्कुल नहीं रखना चाहते हैं।

2. जब आप अपने स्थानीय परिवर्तन रखना चाहते हैं

यदि आप नए परिवर्तनों को रिमोट से खींचना चाहते हैं और इस खींचतान के दौरान स्थानीय परिवर्तनों को अनदेखा करना चाहते हैं,

git stash

यह सभी स्थानीय परिवर्तनों को रोक देगा, अब आप दूरस्थ परिवर्तनों को खींच सकते हैं,

git pull

अब, आप अपने स्थानीय परिवर्तनों को वापस ला सकते हैं,

git stash pop

1
git reset --hardसभी स्थानीय परिवर्तनों को दूर नहीं करता है। यह केवल संशोधनों को हटाता है। यदि आप अतिरिक्त git clean -fd
जोड़ना


4

मुझे लगता है कि git में एक बात है जो स्पष्ट रूप से प्रलेखित नहीं है। मुझे लगता है कि यह वास्तव में उपेक्षित था।

git checkout .

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

नहीं है git clean -fdअच्छी तरह से ट्रैक न किए गए फ़ाइलों के लिए काम करता है।

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

लेकिन मुझे लगता है कि उनके पास git checkoutबिना किसी विकल्प के होना चाहिए , सभी अस्थिर परिवर्तनों को हटा दें और मंचन को स्पर्श न करें। यह थोड़े मॉड्यूलर और सहज ज्ञान युक्त है। अधिक क्या git resetकरता है। git cleanभी ऐसा ही करना चाहिए।


2

सबसे अच्छा तरीका परिवर्तनों की जाँच कर रहा है।

फ़ाइल pom.xml को प्रोजेक्ट-नाम में बदलकर आप इसे कर सकते हैं:

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from origin.
# Switched to a new branch 'master'

2

के लिए छोड़ें सब मैं भी छिपा सकते हैं और उस गुप्त कोष में ड्रॉप करना चाहते, यह सब त्यागने के लिए सबसे तेज़ तरीका है, खासकर यदि आप एक से अधिक रेपोस के बीच काम करते हैं।

यह {0}कुंजी में सभी परिवर्तनों को रोक देगा और तुरंत इसे से हटा देगा{0}

git stash && git stash drop


1

सबसे पहले जाँच करें कि आपका महत्वपूर्ण परिवर्तन सहेजा गया है या नहीं:

$ गिट स्थिति

कोशिश से

$ जीआईटी रीसेट - भार

यह आपकी शाखा को डिफ़ॉल्ट रूप से रीसेट कर देगा

लेकिन अगर आपको बस पूर्ववत की आवश्यकता है:

$ संपादित करें (1) $ git जोड़ने के लिए frotz.c filfre.c $ mailx (2) $ git रीसेट
(3) $ git पुल git: //info.example.com/ nitfol


और पढ़ें >> https://git-scm.com/docs/git-reset


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