दूरस्थ रिपॉजिटरी HEAD की तरह ही स्थानीय रिपोजिटरी शाखा को रीसेट करें


3849

मैं दूरस्थ रिपॉजिटरी की शाखा की तरह होने के लिए अपनी स्थानीय शाखा को कैसे रीसेट करूं?

मैंने किया:

git reset --hard HEAD

लेकिन जब मैं एक चलाने git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

क्या आप मुझे बता सकते हैं कि मेरे पास ये 'संशोधित' क्यों हैं? मैंने इन फ़ाइलों को नहीं छुआ है? अगर मैंने किया, तो मैं उन्हें हटाना चाहता हूं।


8
आउटपुट के अनुसार git statusआपकी दूसरी कमांड git reset --hard HEADविफल रही। आपने हालांकि इसका उत्पादन नहीं किया, लेकिन इसका पेस्ट नहीं किया। → अधूरा सवाल।
रॉबर्ट सिएमर

2
आप यहां दो मुद्दों को मिला रहे हैं: 1) एक स्थानीय शाखा को उस बिंदु पर कैसे रीसेट किया जाए, जहां रिमोट है और 2) अपने स्टेजिंग क्षेत्र (और संभवत: कार्यशील निर्देशिका) को कैसे साफ़ करें, ऐसा git statusकहते हैं nothing to commit, working directory clean। - कृपया निर्दिष्ट करें!
रॉबर्ट सिएमर

जवाबों:


6684

दूरस्थ शाखा से मिलान करने के लिए अपनी शाखा की स्थापना दो चरणों में की जा सकती है:

git fetch origin
git reset --hard origin/master

यदि आप ऐसा करने से पहले अपनी वर्तमान शाखा की स्थिति को बचाना चाहते हैं (बस मामले में), आप यह कर सकते हैं:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

अब आपका काम शाखा "मेरी-बचाई-काम" पर बचाया जाता है यदि आप यह तय करते हैं कि आप इसे वापस चाहते हैं (या बाद में इसे देखना चाहते हैं या अपनी अद्यतन शाखा के विरुद्ध इसे अलग कर सकते हैं)।

ध्यान दें कि पहला उदाहरण मानता है कि रिमोट रेपो का नाम "मूल" है और यह कि रिमोट रेपो में "मास्टर" नाम की शाखा आपके स्थानीय रेपो में वर्तमान में चेक-आउट शाखा से मेल खाती है।

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


4
आपके उत्तर के लिए धन्यवाद। आपने कहा 'ध्यान दें कि पहला उदाहरण मानता है कि रिमोट रेपो का नाम "मूल" है और रिमोट रेपो में "मास्टर" नाम की शाखा आपके स्थानीय रेपो में शाखा से मेल खाती है।' 'Git reset --hard' निष्पादित करने से पहले मैं अपने रिमोट रेपो के नाम और मेरी शाखा के नाम को कैसे दोहरा सकता हूँ? एक बार फिर धन्यवाद।
249 बजे hap497

21
यदि आपने स्पष्ट रूप से रिमोट का नाम नहीं दिया है, तो यह नाम संभवतः "मूल" (डिफ़ॉल्ट) है। आप सभी दूरस्थ नामों की सूची प्राप्त करने के लिए "गिट रिमोट" का उपयोग कर सकते हैं। फिर आप "git Remote <name>" का उपयोग कर सकते हैं, यह देखने के लिए कि कौन सी शाखाएं एक-दूसरे के साथ धक्का / खींचती हैं (जैसे कि यदि आपकी "मास्टर" शाखा को "मूल" नाम के "मूल" से क्लोन किया गया था, तो आपको एक पंक्ति मिल जाएगी। कहते हैं कि "मास्टर दूरस्थ मास्टर के साथ विलीन हो जाता है")।
डैन मोल्डिंग

6
"यह गैर-नंगे भंडार में धकेलने की अनुशंसा नहीं की गई है (और वर्तमान में चेक-आउट की गई शाखा में नहीं, विशेष रूप से ऐसा क्यों है?
लीगी

27
बस लाने के बाद, मेरा मानना ​​है कि आप git reset FETCH_HEAD --hardइसके बजाय कर सकते हैं , साथ ही, इसका वही अर्थ है।
जीन

6
इसने मेरे द्वारा जोड़ी गई फ़ाइलों को नहीं हटाया।
ट्रिस्मेगिस्टोस

416

मुझे करने की ज़रूरत थी (स्वीकृत उत्तर में समाधान):

git fetch origin
git reset --hard origin/master

के बाद:

git clean -f

स्थानीय फ़ाइलों को हटाने के लिए

यह देखने के लिए कि क्या फ़ाइलें निकाली जाएंगी (वास्तव में उन्हें हटाए बिना):

git clean -n -f

89
इसके अलावा, git clean -d -fअगर वहाँ अनुपयोगी निर्देशिका मौजूद हैं।
गर्ग

54
यह भीgit clean -fdx
स्वप्निल कोतवाल

14
यदि आप दूरस्थ शाखा की सटीक प्रतिलिपि चाहते हैं तो आपको git clean -ffdx द्वारा पालन करना होगा। ध्यान दें कि thare दो f हैं।
Trismegistos

6
git clean -fआवश्यक टुकड़ा मैं की जरूरत थी। धन्यवाद!
प्रातः

17
स्वच्छ कमांड का उपयोग करके सावधान रहें। यह अन्य शाखाओं से उपेक्षित फ़ाइलों को हटा सकता है।
मिकोप

306

सबसे पहले, HEADइसी अपस्ट्रीम ब्रांच के पहले वाले हिस्से में रीसेट करें :

git reset --hard @{u}

निर्दिष्ट @{u}या इसके क्रिया रूप @{upstream}का लाभ यह है कि दूरस्थ रेपो और शाखा का नाम स्पष्ट रूप से निर्दिष्ट नहीं किया जाना चाहिए।

अगला, आवश्यकतानुसार, अलिखित फ़ाइलों को हटा दें, वैकल्पिक रूप से भी -x:

git clean -df

अंत में, आवश्यकतानुसार, नवीनतम परिवर्तन प्राप्त करें:

git pull

53
यह स्वीकार किए गए एक की तुलना में बेहतर उत्तर की तरह लगता है, क्योंकि यह गतिशील रूप से वर्तमान अपस्ट्रीम शाखा के लिए हमेशा की तरह स्थिर रहता है जैसे किorigin/master
जॉन z

@ जोंज़ स्पॉट पर, @{upstream}बहुत काम है और इसे एलिय्याह में इस्तेमाल किया जा सकता है:alias resetthisbranch="git reset --hard @{upstream}"
सिद्धार्थ

1
@ GangadharJannu git reset --hardको एक कमिटमेंट की आवश्यकता है, अन्यथा यह नहीं पता होता कि आपको क्या रीसेट करना है। @{u}एक विशिष्ट कमिट के अंक - ट्रैक की गई शाखा के प्रमुख, जब से आपने आखिरी बार किया था git fetch
क्रिस्टोफर बक्केजॉर्ड

1
हैश हम कर सकते हैं के लिए प्रतिबद्ध विवरण के लिए लेकिन फिर भी बिना @KristofferBakkejord धन्यवाद git reset --hardहालांकि यह दूरस्थ शाखा को रीसेट नहीं होगा
गंगाधर jannu

2
किसी और के लिए जिसने लगभग एक नया प्रश्न खोला है, यदि आप पॉवर्सशेल से लाभ उठाते हैं, तो उद्धरण ( git reset --hard "@{u}") का उपयोग करें । मुझे पता करने के लिए कुछ समय लगा।
MPStoering

112

git reset --hard HEADवास्तव में केवल अंतिम प्रतिबद्ध राज्य के लिए रहता है। इस मामले में HEAD आपकी शाखा के HEAD को संदर्भित करता है।

यदि आपके पास कई काम हैं, तो यह काम नहीं करेगा ..

जो आप शायद करना चाहते हैं, वह मूल के सिर पर रीसेट हो जाता है या जिसे आप रिमोट रिपॉजिटरी कहते हैं। मैं शायद ऐसा ही कुछ करूँगा

git reset --hard origin/HEAD

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


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

73

उपरोक्त सभी सुझाव सही हैं, लेकिन अक्सर अपनी परियोजना को वास्तव में रीसेट करने के लिए , आपको उन फ़ाइलों को भी हटाने की आवश्यकता होती है जो आपके पास हैं .gitignore

अपनी प्रोजेक्ट डायरेक्टरी को मिटाने और रिमोट से फिर से क्लोनिंग करने के लिए नैतिक समकक्ष प्राप्त करना है:

git fetch
git reset --hard
git clean -x -d -f

चेतावनी : git clean -x -d -fहै अपरिवर्तनीय और आप फ़ाइलें और डेटा (जैसे चीजें आप का उपयोग कर नजरअंदाज किया है खो सकते हैं .gitignore)।


12
चेतावनी: "git clean -x -d -f" अपरिवर्तनीय है और आप
.गितिग्नोर

थोड़ा छोटा: git clean -xdfइसके बराबर है git clean -x -d -f
किरील

साफ साफ -ffxd सब कुछ नहीं रेपो में निकालने के लिए
Trismegistos

44

नीचे दिए गए आदेशों का उपयोग करें। ये कमांड लोकल गिट से सभी अनटैक की गई फाइल्स को भी हटा देंगे

git fetch origin
git reset --hard origin/master
git clean -d -f

6
यह अधिक पूर्ण प्रतिक्रिया है क्योंकि git clean -d -fहम अभी भी स्थानीय निर्देशिका में पुरानी शाखा की कुछ चीजों के बिना हैं । धन्यवाद दोस्त।
फ्लावियो

3
यह वही है जो इसे रिमोट की तरह बनाता है। साफ महत्वपूर्ण है।
डेविड एस।

1
साफ साफ -xxd truely को हटाने के लिए सब कुछ
Trismegistos

1
मुझे ठीक इसी की आवश्यकता थी। धन्यवाद
AllJs

38

प्रश्न यहाँ दो मुद्दों को मिलाता है:

  1. स्थानीय शाखा को उस बिंदु पर कैसे रीसेट करें जहां रिमोट है
  2. कैसे अपने मचान क्षेत्र खाली करने के लिए (और संभवतः कार्यशील निर्देशिका), ताकि git statusकहते हैंnothing to commit, working directory clean.

एक-स्टॉप-उत्तर है:

  1. git fetch --prune (वैकल्पिक) रिमोट रेपो के स्थानीय स्नैपशॉट को अद्यतन करता है। आगे की आज्ञाएँ केवल स्थानीय हैं।
    git reset --hard @{upstream}स्थानीय शाखा पॉइंटर को उस स्थान पर रखता है जहाँ रिमोट का स्नैपशॉट है, साथ ही उस कमेटी की फाइलों के लिए इंडेक्स और वर्किंग डायरेक्टरी को सेट करता है।
  2. git clean -d --force "काम करने वाली निर्देशिका को साफ" कहने के लिए अनट्रैक की गई फ़ाइलों और निर्देशिकाओं को हटा देता है।

1
@{upstream}वाक्य रचना सेट जो यदि आप डिफ़ॉल्ट रूप से होता होना करने के लिए नदी के ऊपर की आवश्यकता है git checkout <branchname>। - अन्यथा इसके साथ बदलें origin/<branchname>
बजे रॉबर्ट सिएमर

सब कुछ निकालने के -xलिए जोड़ें को git cleanकमिट में न रखें (यानी। .ignignore मैकेनिज्म की अनदेखी की गई फाइलें)।
रॉबर्ट सिएमर

22

यह ऐसी चीज है जिसका मैं नियमित रूप से सामना करता हूं, और मैंने किसी भी शाखा के साथ काम करने के लिए ऊपर दी गई स्क्रिप्ट वोल्फगैंग को सामान्यीकृत किया है

मैंने एक "क्या आप सुनिश्चित हैं" प्रॉम्प्ट, और कुछ प्रतिक्रिया आउटपुट भी जोड़े हैं

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

3
आप रिमोट का नाम पाने के लिए "गिट रिमोट" का उपयोग करना चाह सकते हैं। कुछ मामलों में, यह "मूल" नहीं होगा
Yurik

17

बशर्ते कि दूरस्थ रिपॉजिटरी है origin, और इसमें आपकी रुचि है branch_name:

git fetch origin
git reset --hard origin/<branch_name>

इसके अलावा, आप की वर्तमान शाखा को रीसेट करने के originलिए जाते हैं HEAD

git fetch origin
git reset --hard origin/HEAD

यह काम किस प्रकार करता है:

git fetch origin किसी भी चीज़ को मर्ज या रीबेस करने के लिए नवीनतम को रिमोट से डाउनलोड करें।

फिर उस शाखा को git resetरीसेट करता <branch_name>है जो आपने अभी प्राप्त की है। --hardविकल्प आपके काम कर पेड़ में फ़ाइलों को मैच के लिए में सभी फ़ाइलों में परिवर्तन origin/branch_name


14

मैंने किया:

git branch -D master
git checkout master

पूरी तरह से शाखा को रीसेट करने के लिए


ध्यान दें, आपको आवश्यक शाखा को हटाने में सक्षम होने के लिए किसी अन्य शाखा में चेकआउट करना चाहिए


5
आपको एक बार फिर से प्रश्न पढ़ना चाहिए, रिमोट को प्रभावित करने पर कुछ भी नहीं है, लेकिन रिमोट के समान ही सेट करना है, इसलिए आपको रिमोट के साथ कुछ भी नहीं करना चाहिए, और इससे मेरे मामले में और ऊपर से मदद मिली।
user2846569

यदि आप इसे रिमोट की तरह ही सेट करना चाहते हैं, तो आपको कम से कम किसी ऐसे बिंदु पर लाने के लिए सहमत नहीं होना चाहिए?
टिम

2
आपको कम से कम यह प्रयास करना चाहिए या डॉक्स पढ़ना चाहिए: kernel.org/pub/software/scm/git/docs/git-checkout.html
user2846569

जाने का रास्ता, मेरे पास शाखा में एक भ्रष्ट। Pck फाइल थी और बाकी विकल्प काम नहीं करते थे, धन्यवाद !!
LuckyBrain

14

यहाँ एक स्क्रिप्ट है जो स्वचालित रूप से सबसे लोकप्रिय उत्तर का सुझाव देती है ... देखें https://stackoverflow.com/a/13308579/1497139 एक बेहतर संस्करण के लिए जो शाखाओं का समर्थन करता है

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see /programming/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

10

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

git reset --hard HEAD~2

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

तो अपने प्रश्न का उत्तर दे रहे हैं - यदि आप दूरस्थ रिपॉजिटरी HEAD के आगे 5 कर रहे हैं, तो आपको यह कमांड चलाना चाहिए:

git reset --hard HEAD~5

ध्यान दें कि आप अपने द्वारा किए गए परिवर्तनों को खो देंगे, इसलिए सावधान रहें!


7

पिछले उत्तर मान लेते हैं कि रीसेट की जाने वाली शाखा वर्तमान शाखा (चेक आउट) है। टिप्पणियों में, ओपी hap497 ने स्पष्ट किया कि शाखा वास्तव में चेक आउट है, लेकिन मूल प्रश्न द्वारा यह स्पष्ट रूप से आवश्यक नहीं है। चूंकि कम से कम एक "डुप्लिकेट" प्रश्न है, पूरी तरह से रिपॉजिटरी राज्य में शाखा को रीसेट करें , जो यह नहीं मानता है कि शाखा को चेक आउट किया गया है, यहां एक विकल्प है:

यदि शाखा "mybranch" को वर्तमान में चेक नहीं किया गया है, तो इसे दूरस्थ शाखा "myremote / mybranch" के प्रमुख पर रीसेट करने के लिए, आप इस निम्न-स्तरीय कमांड का उपयोग कर सकते हैं :

git update-ref refs/heads/mybranch myremote/mybranch

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

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


7

यह वह है जो मैं अक्सर उपयोग करता हूं:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

ध्यान दें कि यह किसी भी बदलाव के लिए एक और शाखा के लिए / अपने स्थानीय मास्टर में परिवर्तन करने के लिए नहीं शाखा का विकास, लेकिन इसके बजाय चेकआउट अच्छा अभ्यास है, परिवर्तन के प्रकार, जैसे द्वारा prepended शाखा नाम के साथ feat/, chore/, fix/, आदि इस प्रकार आप केवल करने की जरूरत है परिवर्तन खींचो, गुरु से किसी भी परिवर्तन को धक्का मत देना। अन्य शाखाओं के लिए समान बात जो दूसरों के लिए योगदान करती है। इसलिए उपरोक्त का उपयोग केवल तभी किया जाना चाहिए जब आप उस शाखा में परिवर्तन करने के लिए हुए हों जो दूसरों ने की है, और जिसे रीसेट करने की आवश्यकता है। अन्यथा भविष्य में एक ऐसी शाखा पर धकेलने से बचें, जिसे अन्य लोग धकेलते हैं, इसके बजाय चेकआउट करें और जाँच की गई शाखा के माध्यम से उक्त शाखा को धकेलें।

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

अपने रीमोट्स की जांच करें, सुनिश्चित करें कि आपके अपस्ट्रीम और git remote add upstream <insert URL>ओरिजिनल वही हैं जो आप उम्मीद करते हैं, यदि अपेक्षित नहीं है , तो उपयोग करें , जैसे कि मूल GitHub रेपो जो आपने से लिया था, और / या git remote add origin <insert URL of the forked GitHub repo>

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

GitHub पर, आप स्थानीय कार्य के रूप में उसी नाम से शाखा की जांच कर सकते हैं, ताकि वहां कार्य को बचाया जा सके, हालांकि यह आवश्यक नहीं है कि मूल विकास में स्थानीय सहेजे गए कार्य शाखा के समान परिवर्तन हों। मैं एक उदाहरण के रूप में विकसित शाखा का उपयोग कर रहा हूं, लेकिन यह किसी भी मौजूदा शाखा का नाम हो सकता है।

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

फिर अगर आपको इन परिवर्तनों को किसी अन्य शाखा में विलय करने की आवश्यकता है, जहां किसी भी तरह के संघर्ष हैं, तो विकास, उपयोग में परिवर्तन को संरक्षित करना:

git merge -s recursive -X theirs develop

उपयोग करते समय

git merge -s recursive -X ours develop

ब्रांच_नाम के परस्पर विरोधी परिवर्तनों को संरक्षित करने के लिए। अन्यथा के साथ एक mergetool का उपयोग करें git mergetool

एक साथ सभी परिवर्तनों के साथ:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

ध्यान दें कि अपस्ट्रीम / डेवलपमेंट के बजाय आप एक प्रतिबद्ध हैश, अन्य शाखा का नाम आदि का उपयोग कर सकते हैं, एक CLI टूल का उपयोग करें जैसे ओह माय ज़श यह जांचने के लिए कि आपकी शाखा हरे रंग का संकेत दे रही है कि कमिट करने के लिए कुछ नहीं है और वर्किंग डायरेक्टरी क्लीन है ( जिसकी पुष्टि हो या उसके द्वारा भी सत्यापित हो git status)। ध्यान दें कि यह वास्तव में, विकास को अपस्ट्रीम के अगर वहाँ कुछ भी स्वचालित रूप से एक प्रतिबद्ध से, जैसे यूएमएल चित्र, लाइसेंस हेडर, आदि जोड़ा है की तुलना करता जोड़ सकते हैं ताकि मामले में, आप तो परिवर्तन पर खींच सकता है origin developके लिए upstream develop, यदि आवश्यक हो तो।


6

उत्तर

git clean -d -f

( निर्देशिकाओं को हटाने के लिए -d ) को कम करके आंका गया था । धन्यवाद!


और बिना किसी अतिरिक्त फ़ाइलों के एक पूर्ण, 100% साफ रेपो फोल्डर के लिए git clean -xdf। यह किसी भी और सभी फ़ाइलों को हटा देगा जो कि git के बारे में नहीं जानते हैं, और आपके फ़ोल्डर को मेल करेंगे कि git की ऑब्जेक्ट सूची में क्या है। ध्यान दें कि आप "क्या-अगर" करने के लिए -n(जैसे git clean -nxdf) जोड़ सकते हैं और यह आपको बताएगा कि वास्तव में कुछ भी किए बिना यह क्या हटा देगा। ( git clean )
qJake

5

यदि आप HEADकार्यशील निर्देशिका और अनुक्रमणिका दोनों के लिए वापस राज्य में जाना चाहते हैं , तो आपको इसके git reset --hard HEADबजाय करना चाहिए HEAD^। (यह एक टाइपो रहा हो सकता है, जैसे सिंगल बनाम डबल डैश के लिए --hard।)

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


4

मेरे स्थानीय गिट रेपो में अनट्रेंड और संशोधित फ़ाइलों पर किसी भी प्रकार के रीसेट और सफाई का कोई प्रभाव नहीं लगता था (मैंने सभी विकल्पों की कोशिश की)। इसका एकमात्र समाधान स्थानीय रेपो को rm करना और रिमोट से इसे फिर से क्लोन करना था।

सौभाग्य से मेरे पास कोई अन्य शाखा नहीं थी जिसकी मुझे परवाह थी।

xkcd: Git


1

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

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* मान लें कि आपकी .it फाइलें दूषित नहीं हैं


4
यदि आप कुछ बनना चाहते हैं तो आप अपने ऑपरेटिंग सिस्टम को फिर से इंस्टॉल कर सकते हैं!
सेबेस्टियन शॉले

1

क्या आप एक सुविधा-शाखा बनाना भूल गए हैं और गलती से सीधे मास्टर पर प्रतिबद्ध हो गए हैं?

अब आप सुविधा शाखा बना सकते हैं और मास्टर- वर्क (स्थानीय फाइल सिस्टम) को प्रभावित किए बिना मास्टर सेट को सेट कर सकते हैं, जिससे फ़ाइल-लॉक के निर्माण, परीक्षणों और परेशानी से बचा जा सकता है:

git checkout -b feature-branch
git branch -f master origin/master


-3

यदि आपको अपने स्थानीय परिवर्तनों को सहेजने में कोई आपत्ति नहीं है, फिर भी उत्पत्ति / HEAD से मिलान करने के लिए अपने रिपॉजिटरी को अपडेट करना चाहते हैं, तो आप बस अपने स्थानीय परिवर्तनों को रोक सकते हैं और फिर खींच सकते हैं:

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