कैसे एक पुल खींचो पूर्ववत करने के लिए?


238

मैं दूरस्थ मूल पर अवांछित हिट्स के कारण अपने गिट पुल को पूर्ववत करना चाहूंगा, लेकिन मुझे नहीं पता कि मुझे किस संशोधन को वापस रीसेट करना है।

सुदूर मूल पर जीआईटी खींचने से पहले मैं कैसे राज्य में वापस जा सकता हूं?


4
साइड नोट: आप इसे git fetch upstreamपहले उपयोगी पा सकते हैं , फिर एक त्वरित नज़र डालें git diff upstream/branchकि आप किस चीज़ में विलय कर रहे हैं। यदि सब कुछ ठीक है, तो आगे बढ़ेंgit merge upstream/branch
शहबाज

1
आप अपने सभी स्ट्रीट क्रेड को खो देंगे और एक सप्ताह के वेतन को डॉक किया जाएगा यदि कोई भी हिप्स्टर ब्रोगमर आपको जीयूआई से गिट कमांड करता है, लेकिन गीथहब डेस्कटॉप और एटम दोनों के पास सुरक्षित और सीधा बटन हैं undoजो आसानी से और स्पष्ट रूप से चरण और अस्थिर फ़ाइलों को कमिट और चेक करते हैं। GUI लोग भी हैं!
डेम पिलाफियन

जवाबों:


391

या इसे अन्य उत्तर की तुलना में अधिक स्पष्ट बनाने के लिए:

git pull 

ओह?

git reset --keep HEAD@{1}

1.7.1 से पुराने git के संस्करणों में नहीं है --keep। यदि आप ऐसे संस्करण का उपयोग करते हैं, तो आप उपयोग कर सकते हैं --hard- लेकिन यह एक खतरनाक ऑपरेशन है क्योंकि यह किसी भी स्थानीय परिवर्तन को खो देता है।


कमेंट करने वाले को

ORIG_HEAD HEAD की पिछली स्थिति है, जो संभवत: खतरनाक व्यवहार वाले आदेशों द्वारा निर्धारित की जाती है, ताकि उन्हें वापस करना आसान हो। यह अब कम उपयोगी है कि Git ने रिफ्लॉग किया: HEAD @ {1} लगभग ORIG_HEAD के बराबर है (HEAD @ {1} हमेशा HEAD का अंतिम मूल्य होता है, खतरनाक ऑपरेशन से पहले ORIG_HEAD HEAD का अंतिम मूल्य होता है


2
HEAD @ {1} और HEAD ^ में क्या अंतर है?
हुग्मेओ

7
@hugemeow यह एक अच्छा SO प्रश्न होगा। इस बीच man git-rev-parseयह वर्णन करता है। HEAD@{1}प्रतीकात्मक का पिछला मूल्य HEADहै, reflogजबकि वर्तमान का HEAD^(पहला) मूल संशोधन है HEAD। इन दोनों की जरूरत होती है समतुल्य (जैसे एक रिबेस, एक हार्ड रीसेट, एक शाखा स्विच और इस तरह की चीजें) के बाद। Reflog के लिए जुड़े हुए लेख को पढ़ें। चीयर्स
सेह

10
PowerShell उपयोगकर्ता, एक कोष्ठक के साथ कोष्ठक से बचते हैं:git reset HEAD@`{1`}
रॉबर्ट क्लेपुल

3
ss64.com/ps/syntax-esc.html मुझे लगता है कि यदि आप लिखना चाहते थे HEAD@`{1`}कि चाहे जो भी POSIX गोले पर भी काम करता है ऐसा करने के लिए, या:'HEAD@{1}'
sehe

2
मुझे लगता है कि यह न केवल पुल को रीसेट करता है, बल्कि मेरा कमिट भी करता है = (
falsarella

67

git reflog showआपको HEAD का इतिहास दिखाना चाहिए। आप इसका उपयोग यह जानने के लिए कर सकते हैं कि आप पहले कहां थे pull। फिर आप resetअपने HEADउस कमिटमेंट को कर सकते हैं।


git reflog शो ने यह आउटपुट दिया: c9e5e4d HEAD @ {0}: पुल: फास्ट फॉरवर्ड 1c86a22 HEAD @ {1}: मूल गुरु को खींचें: फास्ट फॉरवर्ड 05c141a HEAD @ {2}: पुल: फास्ट फॉरवर्ड मैं HEAD को HEAD में सुरक्षित रूप से रीसेट कर सकता हूं। @ {१}
कार्तिंस

सेह के अन्य उत्तर में विवरण है कि वहां कैसे पहुंचा जाए।
नौफाल इब्राहिम

यह विनाशकारी मचाने के बाद सुपर-उपयोगी था जो किसी भी तरह से मेरे इतिहास में विलय हो गया। उन्हें एक अंतिम-ज्ञात की तलाश में बाहर निकाल कर फिर से धक्का देकर छोड़ दिया।
Domenic

यदि pullपहली क्रिया हो तो क्या होगा ? यदि pullवह है HEAD@{1}, और इससे पहले और कुछ नहीं है, तो आप उससे पहले किसी राज्य में कैसे लौटेंगे?
हेंद्रा उज़िया

भंडार को फिर से बनाना?
नौफल इब्राहिम

29

इसने मेरे लिए काम किया।

git reset --hard ORIG_HEAD 

एक मर्ज या खींचो को पूर्ववत करें:

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

इसे चेकआउट करें: अधिक के लिए HEAD और ORIG_HEAD


17

<SHA#>आप जिस कमिटमेंट में जाना चाहते हैं, उसके लिए खोजें । आप इसे github में या टाइप करके git logया git reflog showकमांड लाइन पर पा सकते हैं और फिर कर सकते हैं git reset --hard <SHA#>


कमिट के लिए क्या खोजें?
मार्टिन

क्षमा करें, मैंने तय किया है कि<SHA#>
Nina

यह वह आज्ञा है जिसका मैं सबसे अधिक उपयोग करता हूं जब मुझे कुछ पूर्ववत करना होता है
कार्तिन

2

से https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

एक गंदे काम करने वाले पेड़ के अंदर एक मर्ज या खींचो

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

यहां तक ​​कि अगर आपके पास अपने काम के पेड़ में स्थानीय संशोधन हो सकते हैं, तो आप सुरक्षित रूप से कह सकते हैं कि git pullजब आप जानते हैं कि दूसरी शाखा में परिवर्तन उनके साथ ओवरलैप नहीं होता है।

मर्ज के परिणाम का निरीक्षण करने के बाद, आप पा सकते हैं कि दूसरी शाखा में परिवर्तन असंतोषजनक है। रनिंग git reset --hard ORIG_HEAD आपको वापस वहीं जाने देगा जहां आप थे, लेकिन यह आपके स्थानीय परिवर्तनों को छोड़ देगा, जो आप नहीं चाहते हैं। git reset --mergeअपने स्थानीय परिवर्तन रखता है।

यह भी देखें https://stackoverflow.com/a/30345382/621690


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