Git में स्थानीय कमिट्स कैसे छोड़ें?


262

मैं कुछ पर काम कर रहा था, और फैसला किया कि यह पूरी तरह से खराब हो गया था ... इसके कुछ प्रतिबद्ध होने के बाद। इसलिए मैंने निम्नलिखित अनुक्रम की कोशिश की:

git reset --hard
git rebase origin
git fetch
git pull
git checkout

किस बिंदु पर मुझे संदेश मिला

Your branch is ahead of 'origin/master' by 2 commits.

मैं अपनी स्थानीय निर्देशिका को मिटा देना चाहता हूं , अपनी स्थानीय निर्देशिका को मिटा देना चाहता हूं और सब कुछ छुड़ाना चाहता हूं। मैं इसे कैसे पूरा कर सकता हूं?


6
दोनों को करने की आवश्यकता नहीं है git fetchऔर git pull- पुल को लाने और मर्ज का संयोजन है।
ईथर

12
उपयोगकर्ताओं पर ध्यान दें: इस प्रश्न की मुख्य समस्या का "एन / कमिट द्वारा" मूल / मास्टर 'से आगे के संदेश से कोई लेना-देना नहीं है। " । कृपया उस संदेश के कारण अन्य प्रश्नों को इस के डुप्लिकेट के रूप में बंद करना बंद करें।

जवाबों:


579
git reset --hard origin/master

सभी कमियों को दूर करेगा origin/masterजहां originरेपो नाम नहीं है और masterशाखा का नाम है।


1
मैंने सोचा था कि वाक्यविन्यास "मूल / मास्टर", एक स्लैश के साथ, एक स्थानीय रेपो को संदर्भित करता है?
डैनियल सी। सोबरल

9
mipadi: अधिक सही ढंग से रखा गया है, यह वर्तमान शाखा को मूल / मास्टर के समान वचन को इंगित करने के लिए रीसेट करेगा।
क्रिस्टोफर हम्मरस्ट्रॉम

यह एक शाखा को संदर्भित करता है। origin/masterएक शाखा है जो रिमोट रेपो की masterशाखा को ट्रैक करती है origin
मिपाड़ी

@ डैनियल.सी.ब्राल नहीं, रिमोट origin/masterकी masterशाखा का संदर्भ है origin
मैथ्यू

1
@ लिलेटलेगर गिट फ़ोल्डर, केवल फाइलों और उनके पथ को ट्रैक नहीं करता है। इसलिए, यह पूरी तरह से खाली फ़ोल्डर्स (बिना फ़ाइलों वाले फ़ोल्डर, या केवल अनदेखा फ़ाइलों) को अनदेखा करेगा। वे कहीं भी दिखाई नहीं देते क्योंकि उनमें जाने के लिए कुछ भी नहीं है।
Mumbleskates

33

एक तरफ के रूप में, मिपदी द्वारा उत्तर के अलावा (जो काम करना चाहिए), आपको पता होना चाहिए कि क्या कर रहे हैं:

git branch -D master
git checkout master

यह भी वही करता है जो आप बिना चाहते हैं having to redownload everything(आपकी बोली समदर्शी)। ऐसा इसलिए है क्योंकि आपके स्थानीय रेपो में दूरस्थ रेपो की एक प्रति शामिल है (और यह प्रतिलिपि आपके स्थानीय निर्देशिका के समान नहीं है, यह आपकी चेक आउट शाखा के समान भी नहीं है)।

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

यदि आपके पास गुरु के अलावा कोई शाखा नहीं है, तो आपको यह करना चाहिए:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp

4
लेकिन यह कैसे बताता है कि मूल रूप से किए गए कमिट्स से स्थानीय रूप से किए गए कमिट्स हैं? वास्तव में, यह मुझे बताता है किCannot delete the branch 'master' which you are currently on.
डैनियल सी। सोबराल

1. मूल रूप से सभी हिट समान हैं, भले ही वे स्थानीय या मूल रूप से बने हों। क्या महत्वपूर्ण है कि इतिहास सही ढंग से सिंक्रनाइज़ हो। आपकी स्थानीय प्रतिबद्धता केवल आपके द्वारा धकेल दिए जाने के बाद ही मूल रूप से मौजूद रहेगी और डिफ़ॉल्ट रूप से धक्का धक्का से इंकार कर देगा यदि मूल पर इतिहास ऐसी स्थिति में समाप्त हो सकता है जिसका कोई मतलब नहीं है।
स्लीपबेटमैन

2
2. बेशक आप उस शाखा को हटा नहीं सकते हैं जो वर्तमान में चेक आउट है। मास्टर को हटाने के लिए, पहले एक और शाखा देखें। अगर वहाँ कोई अन्य शाखा नहीं है तो बस एक अस्थायी एक बनाएं:git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
स्लीपबेटमैन

इस बात पर भी ध्यान दें कि मैंने रिमोट रेपो की आपकी स्थानीय प्रति के बारे में क्या कहा है: git आपको दूरस्थ शाखा की अपनी प्रतिलिपि में फ़ाइलों को संपादित करने या देखने की भी अनुमति नहीं देगा। यह केवल आपको दूरस्थ शाखा से एक और शाखा बनाने की अनुमति देगा जिसे आप तब देख और संपादित कर सकते हैं। सम्मेलन द्वारा, इस स्थानीय शाखा का दूरस्थ शाखा के समान नाम है। आप origin/masterअपने स्थानीय मशीन पर आंशिक रूप से सही हैं । वह रिमोट शाखा की आपकी स्थानीय (पूर्ण) प्रति है। असली रिमोट ब्रांच है origin master
स्लीपबेटमैन

इसने मेरे लिए काम किया। शायद git branch -D masterयह आवश्यक नहीं था, क्योंकि जैसा कि बताया गया है कि यह एक त्रुटि उत्पन्न करता है।
एलेक्सिस विल्के

15

मैं क्या करूँ क्या मैं कठिन हेड को रीसेट करने की कोशिश कर रहा हूं। यह सभी स्थानीय कमियों को मिटा देगा:

git reset --hard HEAD^

यह सबसे अच्छा जवाब है, जो वास्तव में काम किया है। सभी स्थानीय कमिट किए गए और HEAD में रीसेट हो गए। क्या ^ चार का उपयोग करें?
करीम

@Kim '^' शायद रेगेक्स सामान है, जो शायद कुछ काफी गहरा है जिसे मैं मैनुअल फाइल में बहुत समय पहले नहीं जानता या पढ़ता हूँ .. माफ करना यार :)
giang nguyen

1
देर से, लेकिन ^माता-पिता की प्रतिबद्धता का प्रतिनिधित्व करता है, इसलिए HEAD^अनचाहे परिवर्तनों को हटाने के लिए रीसेट करना और शाखा को पिछले प्रतिबद्ध पर प्रभावी ढंग से स्थानांतरित करना, हाल ही में किए गए प्रतिबद्ध को "हटाना" (हालांकि प्रतिबद्ध अभी भी मौजूद है, शाखा अभी इसका कोई मतलब नहीं है)। जवाब में केवल एक स्थानीय कमिटमेंट होगा और बाकी अनकम्यूटेड बदलाव होंगे। @Kim @giang
क्वांटम क्यूवर

3

आपको दौड़ने की जरूरत है

git fetch

सभी परिवर्तन प्राप्त करने के लिए और फिर आपको "आपकी शाखा आगे है" संदेश नहीं मिलेगा।


5
लेशिंग का आस्कर की मुख्य समस्या से कोई लेना-देना नहीं है, जिससे स्थानीय कमिटियों से छुटकारा मिल रहा है।

1
क्या होगा अगर मैं पहले से ही स्थानीय में फाइल कर चुका हूं और फिर उल्लेखित कमांड को आग लगाने की कोशिश कर रहा हूं। यह एक ही त्रुटि संदेश दिखाएगा। मैंने git लाने की कोशिश की और git लाने -पिटने की भी। लेकिन एक ही त्रुटि दिखा रहा है
मोरेज़

1

मैंने ऐसे उदाहरण देखे हैं जहां रिमोट सिंक से बाहर हो गया और अपडेट करने की आवश्यकता है। यदि reset --hardया branch -Dकाम करने में विफल रहता है, तो प्रयास करें

git pull origin
git reset --hard 

इस सवाल का जवाब नहीं है, reset --hardइस स्थिति में एक काम करता है
चार्ल्सबी

1
हाय चार्ल्स, तुम सही हो कि reset --hardयहाँ काम करना चाहिए। हालाँकि, मैं केवल यह इंगित कर रहा हूं कि यह कभी-कभार शाखा को ठीक से रीसेट करने में विफल रहता है और git pull originरिमोट को फिर से सिंक करेगा और इसे reset --hardठीक से काम करने की अनुमति देगा ।
जिम क्लॉज़

0

मुझे एक करना था:

git checkout -b master

जैसा कि गिट ने कहा कि यह मौजूद नहीं है, क्योंकि यह साथ मिटा दिया गया है

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