git - HEAD को पिछले स्थान पर कैसे ले जाएँ?(अलग किया गया सिर) और पूर्ववत करता है




git-checkout git-reset (4)

आज, मैं गलती से एक जांच कर रहा हूं और उस पर काम करना शुरू कर देता हूं, जो कि एचएएडी की स्थिति पर कुछ कमिट करता है। फिर मैंने जो भी किया, मैंने निम्नलिखित कमांड का उपयोग करके दूरस्थ शाखा में धकेल दिया

git push origin HEAD: <My-remote-branch>

फिर

git checkout <My-remote-branch>

फिर

git pull 

अंत में मुझे अपनी शाखा में अपने सभी परिवर्तन मिलते हैं जो मैंने एचआईएडी में अलग किए थे

Git में, मैं एक अन्य शाखा में विलय करके squash commit करने की कोशिश कर रहा था और फिर HEAD को पिछली जगह पर रीसेट कर रहा था:

git reset origin/master

लेकिन मुझे इससे बाहर निकलने की जरूरत है। मैं HEAD को पिछले स्थान पर वापस कैसे ले जा सकता हूं?

मेरे पास इस प्रतिबद्ध के SHA1 23b6772 ( 23b6772 ) हैं जिन्हें मुझे इसे स्थानांतरित करने की आवश्यकता है।
मैं इस कमिट पर वापस कैसे जा सकता हूं?


उत्तर देने से पहले आइए कुछ पृष्ठभूमि जोड़ें, यह बताते हुए कि यह क्या है।

First of all what is HEAD?

HEAD बस वर्तमान शाखा पर वर्तमान प्रतिबद्ध (नवीनतम) के लिए एक संदर्भ है।
किसी भी समय केवल एक ही HEAD हो सकता है। ( git worktree को छोड़कर)

HEAD की सामग्री को .git/HEAD अंदर संग्रहीत किया जाता है और इसमें वर्तमान बाइट के 40 बाइट SHA-1 होते हैं।

detached HEAD

यदि आप नवीनतम कमिट पर नहीं हैं - इसका मतलब है कि HEAD इतिहास में एक पूर्व कमिट की ओर इशारा कर रहा है जिसे इसके detached HEAD कहते हैं।

कमांड लाइन पर, यह इस तरह दिखाई देगा- SHA-1, शाखा नाम की बजाय, क्योंकि HEAD वर्तमान शाखा की नोक की ओर इशारा नहीं कर रहा है

एक अलग सिर से उबरने के बारे में कुछ विकल्प:

git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

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

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

git reflog

आप हमेशा reflog का भी इस्तेमाल कर सकते हैं।
git reflog किसी भी बदलाव को प्रदर्शित करेगा जिसने git reflog को अपडेट किया और वांछित रिफ्लग प्रविष्टि की जांच करके एचईएडी को इस कमिट में वापस भेज दिया जाएगा।

हर बार जब HEAD को संशोधित किया जाता है तो reflog में एक नई प्रविष्टि होगी

git reflog
git checkout [email protected]{...}

यह आपको आपकी इच्छित कमिट पर वापस मिल जाएगा

git reset --hard <commit_id>

"HEAD" को अपने HEAD में इच्छित स्थान पर वापस ले जाएं।

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
  • नोट: ( Git 2.7 के बाद से )
    आप git rebase --no-autostash उपयोग नहीं कर सकते हैं git rebase --no-autostash साथ ही git rebase --no-autostash भी।

git revert <sha-1>

दी गई प्रतिबद्ध या प्रतिबद्ध सीमा को "पूर्ववत करें"।
रीसेट कमांड दिए गए कमिट में किए गए किसी भी बदलाव को "पूर्ववत" करेगा।
पूर्ववत पैच के साथ एक नई प्रतिबद्धता होगी, जबकि मूल प्रतिबद्धता इतिहास में भी रहेगी।

# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>

यह स्कीमा दिखाता है कि कौन सी कमांड क्या करती है।
जैसा कि आप देख सकते हैं कि reset && checkout HEAD संशोधित करता है।


जब आप कमांड git checkout commit_id चलाते हैं, तो HEAD 13ca5593d(say commit-id) से अलग हो 13ca5593d(say commit-id) और शाखा लंबे समय तक उपलब्ध रहेगी।

पिछले स्थान पर वापस जाएं कमांड चरण वार चलाएं- a) git पुल ओरिजिन ब्रांच_नाम (मास्टर कहे) b) git चेकआउट ब्रांच_नेम c) git पुल ओरिजिन शाखा_ने

आप दूरस्थ रिपॉजिटरी से अद्यतन प्रतिबद्ध के साथ पिछले स्थान पर वापस आ जाएंगे।


प्रश्न को इस प्रकार पढ़ा जा सकता है:

मैं 23b6772 पर HEAD साथ अलग-थलग अवस्था में था और टाइप git reset origin/master (क्योंकि मैं स्क्वैश करना चाहता था)। अब मैंने अपना मन बदल लिया है, मैं 23b6772 पर HEAD वापस कैसे 23b6772 ?

सीधा-सीधा उत्तर दिया जा रहा है: git reset 23b6772

लेकिन मैंने इस सवाल को टाल दिया क्योंकि मैं टाइपिंग (कॉपी एंड पेस्टिंग) कमिटेड हैश या इसके संक्षिप्त नाम से बीमार हो गया था, हर बार जब मैं पिछले HEAD को संदर्भित करना चाहता था और यह देखने के लिए गया था कि क्या किसी तरह का शॉर्टहैंड है।

यह पता चला है कि वहाँ है!

git reset - (या मेरे मामले में git cherry-pick - )

जो संयोग से cd - के समान ही था cd - पिछले वर्तमान निर्देशिका में वापस जाने के लिए * निक्स! तो तूफान, एक पत्थर से दो चीजें सीखीं।






git-reflog