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

वोट
2k

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

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

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

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


27 जवाब

वोट
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
का स्रोत उपयोगकर्ता

वोट
588

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

git rebase -i HEAD~N

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

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

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

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

वोट
406

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

git rebase -i <commit>~1

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

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

वोट
276

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

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

git reset --soft HEAD~1

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

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

वोट
46

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

$ git reset --hard HEAD^

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

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

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

वोट
40

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

git rebase -p --onto SHA^ SHA

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

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

31/08/2015 को 19:36
का स्रोत उपयोगकर्ता

वोट
31
git reset --hard commitId

git push <origin> <branch> --force

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

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

वोट
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
का स्रोत उपयोगकर्ता

वोट
19

जबरदस्ती परिवर्तन इतिहास

आप यह मानते हुए नहीं है अभी पिछले प्रतिबद्ध हटाना चाहते हैं, लेकिन आप पिछले n करता है, के साथ जाने के विशिष्ट प्रतिबद्ध हटाना चाहते हैं:

git rebase -i HEAD~<number of commits to go back>है, तो git rebase -i HEAD~5आप पिछले पांच करता देखना चाहते हैं।

तब पाठ संपादक में शब्द बदलने pickके लिए dropहर प्रतिबद्ध करने के लिए आप निकालना चाहते हैं अगले। सहेजें और संपादक से बाहर निकलें। देखा!

Additively परिवर्तन इतिहास

प्रयास करें git revert <commit hash>वापस लाएं एक बनाएगा नई प्रतिबद्ध है कि नाश कर देती निर्दिष्ट करते हैं।

15/06/2017 को 23:01
का स्रोत उपयोगकर्ता

वोट
15

हम रेपो से प्रतिबद्ध 2 और 4 को दूर करना चाहते हैं।

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

नोट: आप रेपो से अधिक व्यवस्थापक अधिकार की आवश्यकता है के बाद से उपयोग कर रहे हैं --hardऔर -f

  • git checkout b3d92c5 चेकआउट पिछले प्रयोग करने योग्य प्रतिबद्ध।
  • git checkout -b repair पर काम करने की एक नई शाखा बनाएँ।
  • git cherry-pick 77b9b82 के माध्यम से चलाने के लिए प्रतिबद्ध 3।
  • git cherry-pick 2c6a45b के माध्यम से चलाने के लिए प्रतिबद्ध 1।
  • git checkout master चेकआउट मास्टर।
  • git reset --hard b3d92c5 मास्टर रीसेट पिछले प्रयोग करने योग्य प्रतिबद्ध करने के लिए।
  • git merge repair मास्टर पर हमारी नई शाखा मर्ज करें।
  • git push -f origin master दूरस्थ रेपो के लिए मास्टर पुश।
05/09/2017 को 07:19
का स्रोत उपयोगकर्ता

वोट
14
git rebase -i HEAD~2

यहाँ '2' करता आप rebase करना चाहते हैं की संख्या है।

'git rebase -i HEAD`

आप सभी प्रतिबद्ध rebase करना चाहते हैं।

फिर आप इन विकल्पों में से एक का चयन करने के लिए सक्षम होंगे।

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

ये लाइनें फिर से आदेश दिया जा सकता है; वे ऊपर से नीचे तक क्रियान्वित कर रहे हैं। यदि आप एक पंक्ति है कि यहाँ COMMIT खो जाएगा निकालते हैं। हालांकि, अगर आप सब कुछ निकालने के लिए, रिबेस निरस्त कर दिया जाएगा। ध्यान दें कि खाली प्रतिबद्ध बाहर टिप्पणी की

आप बस को हटा सकते हैं कि का उपयोग कर प्रतिबद्ध विकल्प "डी" या एक लाइन है कि आपके लिए प्रतिबद्ध निकाला जा रहा है।

18/05/2016 को 23:39
का स्रोत उपयोगकर्ता

वोट
11

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

git reset --hard HEAD~1

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

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

वोट
7

भूल:

मैं git rebase -i --root'अपनी शाखा एड, नादानी से सोच रहा reword सकता है पहला मास्टर से भिन्न प्रतिबद्ध ( विंडोज के लिए GitHub डिफ़ॉल्ट दृश्य छुपा यह संपूर्णता तुलना में महारत हासिल करने के लिए है,)।

जबकि 900 + प्रतिबद्ध खुद को उदात्त में लोड मैं एक सिलिकॉन वैली दाढ़ी बढ़ा ली। बिना किसी परिवर्तन के बाहर निकल रहा है, मैं आरोप लगाया मेरी बैटरी तो दाढ़ी बनाने के लिए, के रूप में सभी 900 + व्यक्तिगत nonchalantly रिबेस करता दीं - अब अपने समय के लिए प्रतिबद्ध रीसेट करने।

Git हराया और मूल बार की रक्षा करने के लिए निर्धारित है, मैं इस स्थानीय भंडार को नष्ट कर दिया और दूरदराज से फिर से क्लोन।

अब यह फिर से जोड़ा था एक हाल ही में अनावश्यक मैं दूर करने के लिए कामना की महारत हासिल करने के लिए प्रतिबद्ध है, तो इसलिए की तरह दीं।

विकल्प थकाऊ:

मैं नहीं करना चाहते हैं git revert- यह एक अतिरिक्त प्रतिबद्ध बनाना होगा, Git पलड़ा भारी दे रही है।

git reset --hard HEADकुछ नहीं किया, जाँच के बाद reflog, पिछले और केवल HEADक्लोन था - Git जीतता है।

नाबालिग जीत - सबसे हाल ही SHA पाने के लिए, मैं github.com पर दूरस्थ भंडार की जाँच की।

बाद में सोच git reset --hard <SHA>काम किया था, मैं गुरु और एक अन्य शाखा अद्यतन 1 ... 2 ... poof! प्रतिबद्ध वापस था - Git जीतता है।

वापस गुरु के लिए बाहर की जाँच कर रहा है, समय की कोशिश करना git rebase -i <SHA>है, तो लाइन को दूर ... कोई लाभ नहीं हुआ, दुख की बात कहने के लिए। " यदि आप एक पंक्ति है कि यहाँ COMMIT खो जाएगा निकालते हैं "। आह ... नई सुविधा पर भुला n00b ट्रोल में 2.8.3 रिलीज नोट्स

समाधान:

git rebase -i <SHA>तब d, drop = remove commit

सत्यापित करने के लिए, मैं एक और शाखा के लिए बाहर की जाँच की है, और देखा - कोई छुपा लाने / गुरु से खींचने के लिए प्रतिबद्ध हैं।

https://twitter.com/holman/status/706006896273063936

आपका अच्छा दिन हो।

25/05/2016 को 20:33
का स्रोत उपयोगकर्ता

वोट
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
का स्रोत उपयोगकर्ता

वोट
7

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

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

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

वोट
5

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

git revert GIT_COMMIT_HASH

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

git push  

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

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

वोट
5

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

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

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

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

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

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

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

वोट
3

स्रोत: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

पिछले प्रतिबद्ध हटाएं

उदाहरण के लिए अपने पिछले प्रतिबद्ध

Git धक्का मूल + aa61ab32 ^: मास्टर

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

कदम

  1. सबसे पहले वर्तमान की मूल शाखा रीसेट प्रतिबद्ध

  2. यह रिमोट को बलपूर्वक धक्का।

git reset HEAD^ --hard

git push origin -f

विशेष रूप से प्रतिबद्ध के लिए, आप पीछा कर रहा है रीसेट करना चाहते हैं

git reset bb676878^ --hard

git push origin -f
22/06/2018 को 13:40
का स्रोत उपयोगकर्ता

वोट
2

क्या मैं आमतौर पर करते हैं जब मैं प्रतिबद्ध और धक्का (यदि किसी को भी धक्का दे दिया उसकी इस समस्या को हल करने की):

git reset --hard HEAD~1

git push -f origin

उममीद है कि इससे मदद मिलेगी

14/06/2017 को 09:22
का स्रोत उपयोगकर्ता

वोट
1

आप पहले से ही धक्का दिया है, तो पहली प्रतिबद्ध आप सिर पर होने के लिए करना चाहते हैं ($ GIT_COMMIT_HASH_HERE) , उसके बाद निम्न चलाएँ:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

फिर प्रत्येक जगह रेपो क्लोन किया गया है, चलाएँ:

git reset --hard origin/master
30/01/2017 को 00:25
का स्रोत उपयोगकर्ता

वोट
0

स्थानीय प्रतिबद्ध हटाना

आप ऊपर छवि पर देख सकते हैं मैं वापस लाएं "परीक्षण परिवर्तन 2" को नष्ट करने के लिए प्रतिबद्ध चाहते हैं (SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (आप का उपयोग करके SHA1 आईडी प्राप्त कर सकते हैं gitkGit बैश) में आदेश)।

कि मैं उपयोग कर सकते हैं (। सभी स्थानीय केवल पर कमांड काम नीचे आप को हटाने के बाद पुश करने के लिए की जरूरत है):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// यह है कि प्रतिबद्ध करने के लिए बैक-अप आप (के SHA1 आईडी परीक्षण परिवर्तन 4 प्रतिबद्ध है 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // यह बैक अप इससे पहले कि आप एक प्रतिबद्ध।
  3. git reset --hard HEAD^ // निकालने के लिए पिछले Git से प्रतिबद्ध

के बाद हटा दें:

के बाद प्रतिबद्ध हटाना

03/07/2018 को 06:51
का स्रोत उपयोगकर्ता

वोट
0

स्थानीय शाखा पर रीसेट

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

मूल करने के लिए सेना धक्का

git push -f origin
29/05/2018 को 07:38
का स्रोत उपयोगकर्ता

वोट
0

Git का उपयोग वापस लौटने https://git-scm.com/docs/git-revert यह सब कोड तो आप अगले commit.Then सिर कि पिछले को इंगित करेंगे प्रतिबद्ध कर सकते हैं वापस आ जाएगा। रूप में वापस लाया कभी नहीं हटानी करता है, लेकिन यह कोई प्रभाव नहीं पड़ेगा पर आप पिछले प्रतिबद्ध।

01/03/2017 को 15:15
का स्रोत उपयोगकर्ता

वोट
0

Git --hard रीसेट

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

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

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

वोट
0

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

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

वोट
-1

मैं नीचे दोनों लिंक भेजा, यह ठीक होगा।

http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html https://gist.github.com/gunjanpatel/18f9e4d1eb609597c50c2118e416e6a6

18/07/2018 को 06:27
का स्रोत उपयोगकर्ता

वोट
-1

अस्थायी फ़ोल्डर में में अपने कोड का बैकअप ले सकते हैं। आदेश के बाद सर्वर के रूप में एक ही सेट हो जाएंगे।

git reset --hard HEAD
git clean -f
git pull

फिर कॉपी आवश्यक अस्थायी फ़ोल्डर से अकेले फ़ाइलें, तो प्रतिबद्ध

14/07/2016 को 11:25
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more