Git में एक शाखा से प्रतिबद्ध हटाएं

वोट
2k

मैं एक प्रतिबद्ध हटाने के बारे में जानना चाहते हैं।

तक delete, मेरा मतलब है यह रूप में अगर मैं उस के लिए प्रतिबद्ध नहीं किया, और जब मैं भविष्य में एक धक्का करना, मेरे परिवर्तन दूरस्थ शाखा करने के लिए धक्का नहीं होगा।

मैं Git मदद पढ़ा है, और मुझे लगता है कि आदेश का उपयोग करना चाहिए है git reset --hard HEAD। क्या ये सही है?

27/08/2009 को 04:39
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


32 जवाब

वोट
3k

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

मान लिया जाये कि आपको लगता है कि प्रतिबद्ध पर बैठे हैं, तो इस आदेश को यह wack होगा ...

git reset --hard HEAD~1

HEAD~1साधन सिर से पहले प्रतिबद्ध।

या, आप के उत्पादन पर दिखाई दे सकता है git log, के लिए प्रतिबद्ध आप के लिए बैक अप लेने, और फिर ऐसा करना चाहते हैं की आईडी के लिए प्रतिबद्ध हैं:

git reset --hard <sha1-commit-id>

आप पहले से ही यह धक्का दे दिया, तो आप एक शक्ति धक्का करने की आवश्यकता होगी यह से छुटकारा पाने के ...

git push origin HEAD --force

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

आप पहले से ही धक्का दिया है, यह उपयोग करने के लिए बेहतर हो सकता है git revert, एक "दर्पण छवि" बनाने के लिए प्रतिबद्ध है कि परिवर्तन पूर्ववत हो जाएंगे करने के लिए। हालांकि, दोनों प्रतिबद्ध लॉग में हो जाएगा।


FYI करें - git reset --hard HEADमहान आप कार्य प्रगति में से छुटकारा पाने के लिए करना चाहते हैं है। यह तुम वापस सबसे हाल ही में करने के लिए रीसेट प्रतिबद्ध है, और अपने काम के पेड़ और सूचकांक में सभी परिवर्तनों को मिटा देगा।


अंत में, यदि आप खोजने की जरूरत है एक प्रतिबद्ध है कि आप "हटाए गए", यह आम तौर पर में मौजूद है git reflogजब तक आप कचरा अपने भंडार एकत्र की है।

27/08/2009 को 04:44
का स्रोत उपयोगकर्ता

वोट
406

एक और संभावना है मेरी निजी पसंदीदा आदेशों में से एक है:

git rebase -i <commit>~1

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

27/08/2009 को 04:49
का स्रोत उपयोगकर्ता

वोट
588

यदि आपने अभी तक कहीं भी प्रतिबद्ध धक्का दिया नहीं है, तो आप उपयोग कर सकते हैं git rebase -iदूर करने के लिए है कि प्रतिबद्ध। सबसे पहले, यह पता लगाने कितनी दूर वापस कि प्रतिबद्ध है (लगभग)। फिर करो:

git rebase -i HEAD~N

~Nसाधन rebase पिछले Nकरता ( Nउदाहरण के लिए, एक संख्या होनी चाहिए HEAD~10)। उसके बाद, आप जिस फ़ाइल को Git आप के लिए प्रस्तुत करता है को नष्ट करने के लिए प्रतिबद्ध हमलावर संपादित कर सकते हैं। कि फ़ाइल को सहेजने पर, Git तो मानो एक आप नष्ट कर दिया मौजूद नहीं था सभी निम्नलिखित प्रतिबद्ध पुनर्लेखन होगा।

Git बुक एक अच्छा है रिबेसिंग पर अनुभाग चित्रों और उदाहरण के साथ।

हालांकि इस के साथ सावधान रहें, क्योंकि अगर आप कुछ है कि आप को बदलने की है कहीं और धक्का दे दिया, एक और दृष्टिकोण की आवश्यकता होगी जब तक आप एक बल धक्का करने की योजना बना रहे हैं।

27/08/2009 को 04:51
का स्रोत उपयोगकर्ता

वोट
46

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

$ git reset --hard HEAD^

(ध्यान दें कि यह सब अप्रतिबद्ध परिवर्तनों को निकालने होगा, देखभाल के साथ उपयोग करें)।

आप पहले से ही प्रकाशित किया है तो होने वाली नष्ट कर दिया प्रतिबद्ध, उपयोग Git वापस लाएं

$ git revert HEAD
27/08/2009 को 11:47
का स्रोत उपयोगकर्ता

वोट
7

सभी आदेशों ऊपर अपने काम के पेड़ और सूचकांक के राज्य को बहाल के रूप में वे के लिए प्रतिबद्ध करने से पहले थे, लेकिन भंडार की स्थिति को बहाल नहीं है। आप इसे को देखें, तो "हटा" प्रतिबद्ध वास्तव में नहीं हटाया जाता है, यह केवल वर्तमान शाखा की नोक पर एक नहीं है।

मुझे लगता है कि एक साथ प्रतिबद्ध दूर करने के लिए किसी भी तरह देखते हैं कि चीनी मिट्टी के बरतन आदेशों । एक ही रास्ता लॉग से हटाने और reflog और फिर एक पर अमल करने के लिए है git prune --expire -now

04/10/2012 को 08:19
का स्रोत उपयोगकर्ता

वोट
276

मैं इस सवाल का जवाब जोड़कर रहा हूँ क्योंकि मैं क्यों किसी को भी जो सिर्फ काम करने की कोशिश की है, क्योंकि कुछ गलती की Git का उपयोग कर यह सब काम को नष्ट करना चाहते हैं नहीं दिख रहा है!

आपको लगता है कि आदेश के लिए प्रतिबद्ध अपने काम रखना चाहते हैं और सिर्फ 'पूर्ववत करें' (आप रेपो के लिए जोर दे रहा से पहले पकड़ा):

git reset --soft HEAD~1

--hard का प्रयोग न करें झंडा जब तक आप पिछले करने के बाद से प्रगति में अपने काम को नष्ट करना चाहते हैं।

15/10/2012 को 19:17
का स्रोत उपयोगकर्ता

वोट
7

यहाँ एक और तरीका यह करना है:

प्रतिबद्ध है कि आप दूरस्थ सर्वर पर नवीनतम एक (सब कुछ होने के बाद यह जाना होगा अलविदा अलविदा) होना चाहता हूँ शाखा क्या वापस करना चाहते चेकआउट, फिर वापस करने के लिए अपने स्थानीय काम कर प्रति रीसेट। ऐसा करने के लिए, SourceTree में मैं पर राइट क्लिक किया और चयनित "इस प्रतिबद्ध करने के लिए BRANCHNAME रीसेट"। मुझे लगता है कि आदेश पंक्ति है:

git reset --hard COMMIT_ID

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

फिर अपने भंडार के स्थानीय निर्देशिका पर जाएँ और इस कमांड चलाएँ:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

यह अपने स्थानीय भंडार में, लेकिन केवल कि एक शाखा के लिए मौजूदा एक के बाद सभी प्रतिबद्ध मिटा देगा।

13/05/2013 को 18:20
का स्रोत उपयोगकर्ता

वोट
5

तुम सिर्फ अपने पिछले प्रतिबद्ध में गड़बड़ तो और एक सार्वजनिक रेपो क्यों उपयोग नहीं करने के लिए इसे आगे बढ़ाने से पहले इसे ठीक करना चाहते हैं (गलत संदेश, कुछ बदलाव जोड़ने के लिए भूल गया):

git commit --amend -m "New message here"

आप नव परिवर्तन का मंचन किया है, तो वे (कि आप में से छुटकारा पाने के लिए कोशिश कर रहे हैं) और कहा कि प्रतिबद्ध का स्थान ले लेगा पिछले प्रतिबद्ध के साथ संयुक्त हो जाएगा।

बेशक अगर आप एक प्रतिबद्ध में संशोधन के बाद आप इसे धक्का दिया है, तो आप इतिहास को फिर से लिखने रहे हैं, इसलिए यदि आप कि निहितार्थ को समझने के लिए सुनिश्चित हो है।

आप पिछले करने के संदेश का उपयोग करना चाहते है, तो आप भी 'मी' के स्थान पर '--no-संपादित करें' विकल्प दे सकते हैं।

डॉक्स: http://git-scm.com/docs/git-commit.html

27/05/2014 को 00:24
का स्रोत उपयोगकर्ता

वोट
29

आप को ठीक करने के लिए अपने नवीनतम प्रतिबद्ध चाहते हैं, आप पूर्ववत कर सकते हैं के लिए प्रतिबद्ध है, और उस में फ़ाइलों unstage, ऐसा करने से:

git reset HEAD~1

यह अपने राज्य के लिए अपने भंडार लौटने से पहले Git आदेशों फ़ाइलों का मंचन जोड़ देगा। आपके परिवर्तन आपके कार्यशील निर्देशिका में होगा। HEAD ~ 1 संदर्भित करता शाखा की वर्तमान टिप नीचे प्रतिबद्ध करने के लिए।

आप uncommit एन करता है, लेकिन अपने काम करने निर्देशिका में कोड में परिवर्तन रखना चाहते हैं:

git reset HEAD~N

आप अपने नवीनतम से छुटकारा पाने के लिए चाहते हैं के लिए प्रतिबद्ध है, और कोड परिवर्तन रखने के लिए नहीं करना चाहते हैं, तो आप एक "हार्ड" रीसेट कर सकते हैं।

git reset --hard HEAD~1

इसी तरह, आप त्यागने के लिए पिछले एन करता है, और कोड परिवर्तन रखने के लिए नहीं करना चाहती चाहते हैं:

git reset --hard HEAD~N
31/05/2014 को 08:19
का स्रोत उपयोगकर्ता

वोट
11

स्थानीय शाखा में हटाने के लिए, का उपयोग करें

git reset --hard HEAD~1

एक दूरस्थ शाखा में हटाने के लिए, का उपयोग करें

git push origin HEAD --force
28/08/2014 को 17:06
का स्रोत उपयोगकर्ता

वोट
31
git reset --hard commitId

git push <origin> <branch> --force

पुनश्च: CommitId एक जो तुम वापस करने के लिए वापस करना चाहते संदर्भित करता है

16/10/2014 को 10:51
का स्रोत उपयोगकर्ता

वोट
0

मान लें कि आप दूरस्थ भंडार करने के लिए धक्का दिया नहीं है, तो आप भंडार फिर से क्लोन सकता है। यह कई बार पसंद का मेरा तरीका है।

31/12/2014 को 06:54
का स्रोत उपयोगकर्ता

वोट
5

आप इतिहास रखने के लिए, के लिए प्रतिबद्ध हैं और पूर्ववत दिखा चाहते हैं, आप का उपयोग करना चाहिए:

git revert GIT_COMMIT_HASH

संदेश का कारण बताते हुए आप को वापस लाने में कर रहे हैं और उसके बाद दर्ज करें:

git push  

जब आप जारी git logआप दोनों "गलत" के लिए प्रतिबद्ध करने और वापस लाने लॉग संदेश देख सकेंगे।

07/01/2015 को 15:13
का स्रोत उपयोगकर्ता

वोट
0

Git --hard रीसेट

Git धक्का मूल HEAD --force

यदि एक या प्रतिबद्ध के अधिक टैग किया गया हो, टैग (रों) पहले हटा दें। अन्यथा टैग प्रतिबद्ध नहीं हटाया जाता है।

24/07/2015 को 14:45
का स्रोत उपयोगकर्ता

वोट
40

एक पूरी निकाला जा रहा है प्रतिबद्ध

git rebase -p --onto SHA^ SHA

जाहिर संदर्भ आप से छुटकारा पाने के लिए चाहते हैं के साथ "SHA" की जगह। "^" कि आदेश में शाब्दिक है।

http://sethrobertson.github.io/GitFixUm/fixup.html

31/08/2015 को 19:36