2012-02-17 17 views
11

पर वापस रोल करने के लिए मैं प्रोग्रामिंग कर रहा हूं। मैं सुंदर कोड जोड़ता हूं और इसे अपने रेपो में धक्का देता हूं:गिट: अंतिम पुश/प्रतिबद्ध

git add * 
git commit 
//writes message 
git push unfuddle master 

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

git pull कहते हैं अपने स्थानीय रेपो

git checkout बाहर स्पैम करता अपनी स्क्रीन और does not कुछ भी बदलने लगते हैं "तारीख तक" है।

स्पष्ट होने के लिए: मैं अपने रिमोट रेपो को संशोधित करने की कोशिश नहीं कर रहा हूं, बस सर्वर की तरह दिखने के लिए अपना स्थानीय रेपो प्राप्त करें।

मेरा वर्तमान समाधान फ़ोल्डर को हटाना और रेपो को पुनः प्राप्त करना है। यह सही नहीं हो सकता है।

उत्तर

13

आप सिर पर रीसेट कर सकते हैं: git reset --hard HEAD

+0

'गिट स्टैश' मैंने जो भी प्राप्त किया है वह भी मिला है। – Mikey

+1

सुनिश्चित करें, आप वहां पहुंचने के लिए अपने अंतिम हार्ड ड्राइव बैकअप का भी उपयोग कर सकते हैं :) – three

1

आप git checkout -f master की कोशिश की?

7

अद्यतन:

यह करने के लिए सबसे अच्छा तरीका है

को
git stash -u 

नहीं

git reset --hard HEAD 

यह एक ऑपरेशन को वापस नहीं लाया जा सकता है करो और आप वास्तव में जब तक अपने काम nuke कर सकते हैं आप मैक पर टाइम मशीन का उपयोग कर रहे हैं या विंडोज 8 पर नई बैकअप सेवा का उपयोग कर रहे हैं। लिनक्स की तरह एक योजना हो सकती है हालांकि मैं एक का उपयोग नहीं करता हूं।

आप भी चाहते हैं पर ध्यान नहीं दिया फ़ाइलों nuked हैं, तो आप

git clean -xdf 
0

आप कुछ भी किया है नहीं है, तो आप बस एक $ git reset --hard कर सकते हैं कर सकते हैं। यदि आपने कुछ सामान किया है, तो आप रिमोट पर मौजूद संस्करण पर वापस जाने के लिए git reset --hard origin/master कर सकते हैं।

3

Git पुल का कहना है अपने स्थानीय रेपो "तारीख तक" है

git pull अपने भंडार अप टू डेट है आपको बता रहा है, क्योंकि आपके स्थानीय भंडार और अपने रिमोट भंडार एक ही सिर के दोनों बिंदु (अंतिम प्रतिबद्धता)। यह आपके git push के कारण है, जिसने दूरस्थ को अपने स्थानीय भंडार के साथ समन्वयित किया है।

गिट उन परिवर्तनों की तुलना नहीं करता है जो दूरस्थ शाखा में प्रतिबद्ध नहीं हैं जब यह तय करता है कि क्या खींचना है; इस प्रकार, देखने के Gits बिंदु, से अपने स्थानीय और दूरस्थ खजाने समय में एक ही बिंदु पर कर रहे हैं, भले ही अपने स्थानीय भंडार unstaged परिवर्तन (परिवर्तनों को आप एड नहीं git add है) है।

वहाँ this page के तल पर एक अच्छा चित्र जो आप प्रक्रिया कैसे काम करती चलता है - आप कुछ बदलाव करने, उन्हें (git add चलाकर) मंच है, और फिर अंत में भंडार करने के लिए उन्हें प्रतिबद्ध (रचनात्मक git commit नामित के माध्यम से)।

स्पष्ट है: मैं बस सर्वर की तरह लग रहे करने के लिए अपने स्थानीय रेपो मिल मेरे दूरस्थ रेपो संशोधित करने के लिए कोशिश नहीं कर रहा हूँ।

दूसरों बाहर तरीकों यह करने के लिए इशारा किया है: git reset --hard HEAD (सूचकांक [मंचन फ़ाइलें] और काम पेड़ [unstaged फ़ाइलें] पिछले करने के लिए प्रतिबद्ध रीसेट), लेकिन यह है कि तुम क्या की समझ बनाना उचित है ' पुनः प्राप्त करने की कोशिश कर रहे हैं - अगर मुझे पता चलेगा कि कैसे गिट पहली बार मैंने अपने काम करने वाले पेड़ को गड़बड़ कर अपनी फाइलों को ट्रैक कर रहा था, तो मैंने झुकाव के घंटे बचाए होंगे।

2

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

git checkout . 
2

आप

git stash 
git pull origin your-branch 
0

git checkout branchname git reset --hard c4e0424 git push origin +branchname

आप --soft उपयोग कर सकते हैं की कोशिश कर सकते इसके बजाय - --hard आप अपने परिवर्तनों को खो देंगे
--soft प्रतिबद्धता की अपनी बदली गई फाइलें

संबंधित मुद्दे