git - गिट में एक शाखा से काम हटाएं




git-rebase git-reset (18)

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

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

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

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

यदि आप पिछले प्रतिबद्धता संदेश का उपयोग करना पसंद करेंगे तो आप '-m' के बजाय '--no-edit' विकल्प भी पारित कर सकते हैं।

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

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

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

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


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

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

यदि आप अपने परिवर्तन रखना चाहते हैं, और हालिया प्रतिबद्धताओं को हटा दें

git reset --soft HEAD^
git pull

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

git rebase -i <commit>~1

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


ऐसा करने का एक और तरीका यहां दिया गया है:

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

git reset --hard COMMIT_ID

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

फिर अपनी रिपोजिटरी की स्थानीय निर्देशिका पर नेविगेट करें और यह आदेश चलाएं:

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

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


गिट रीसेट - हार्ड

गिट पुश उत्पत्ति हेड - फोर्स

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


भूल:

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

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

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

अब यह मास्टर को सबसे हाल ही में अनियंत्रित प्रतिबद्धता दोबारा जोड़ दिया गया था जिसे मैं हटाने की कामना करता था, इसलिए ऐसा हुआ।

विकल्पों को समाप्त करना:

मैं पीछे हटना नहीं चाहता था - यह ऊपरी हाथ गिट देकर एक अतिरिक्त प्रतिबद्धता बनाएगा।

git reset --hard HEAD ने कुछ भी नहीं किया, reflog जांच के बाद, आखिरी और एकमात्र HEAD क्लोन था - गिट जीता।

सबसे हालिया एसएचए प्राप्त करने के लिए, मैंने github.com पर रिमोट रिपोजिटरी की जांच की - मामूली जीत।

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

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

समाधान:

git rebase -i <SHA> फिर d, drop = remove commit

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

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

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


मान लें कि हम रेपो से 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 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 रेपो के लिए git push -f origin master पुश मास्टर।

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

git reset --hard HEAD~1

git push -f origin

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


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

git reset HEAD~1

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

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

git reset HEAD~N

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

git reset --hard HEAD~1

इसी प्रकार, यदि आप अंतिम एन प्रतिबद्धताओं को त्यागना चाहते हैं, और कोड परिवर्तन को नहीं रखना चाहते हैं:

git reset --hard HEAD~N

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

git revert GIT_COMMIT_HASH

संदेश को दर्ज करें कि आप क्यों वापस आ रहे हैं और फिर:

git push  

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


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

git rebase -i HEAD~N

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

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

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


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

$ git reset --hard HEAD^

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

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

$ git revert HEAD

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

git reset --hard HEAD~1

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

git push origin HEAD --force

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

अंतिम प्रतिबद्धता हटाएं

उदाहरण के लिए आपकी आखिरी प्रतिबद्धता

गिट पुश मूल + aa61ab32 ^: मास्टर

अब आप इस प्रतिबद्धता को हटाना चाहते हैं, फिर इसे करने का एक आसान तरीका

कदम

  1. सबसे पहले शाखा को मौजूदा प्रतिबद्धता के माता-पिता को रीसेट करें

  2. इसे दूरस्थ रूप से मजबूर करें।

git reset HEAD^ --hard

git push origin -f

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

git reset bb676878^ --hard

git push origin -f

एक संपूर्ण प्रतिबद्धता को हटा रहा है

git rebase -p --onto SHA^ SHA

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

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


बलपूर्वक इतिहास बदलें

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

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

फिर टेक्स्ट एडिटर में उस शब्द को बदलें जिसे आप निकालना चाहते हैं, उसके आगे शब्द drop । सहेजें और संपादक से बाहर निकलें। देखा!

Additively बदलें इतिहास

git revert <commit hash> आज़माएं। Revert एक नई प्रतिबद्धता बनाएगा जो निर्दिष्ट प्रतिबद्धता को पूर्ववत करता है।


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

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

git reset --hard HEAD~1

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

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

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

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

git push origin HEAD --force

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

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

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

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


git rebase -i HEAD~2

यहां '2' उन कामों की संख्या है जिन्हें आप रीबेज करना चाहते हैं।

'git rebase -i HEAD`

अगर आप सभी कामों को पुनर्जीवित करना चाहते हैं।

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

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

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

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





git-reset