सबसे पहले, "आपकी शाखा मूल / मास्टर से 3 कमिट्स से आगे है" फिर मेरा ऐप पहले के बदलावों के साथ पुराने समय में वापस आ गया है।
पिछले 11 घंटों को वापस करने में मुझे क्या मिलेगा?
सबसे पहले, "आपकी शाखा मूल / मास्टर से 3 कमिट्स से आगे है" फिर मेरा ऐप पहले के बदलावों के साथ पुराने समय में वापस आ गया है।
पिछले 11 घंटों को वापस करने में मुझे क्या मिलेगा?
जवाबों:
git reflog
आपका दोस्त है। उस सूची को प्राप्त करें जिसे आप उस सूची में रखना चाहते हैं और आप इसे रीसेट कर सकते हैं (उदाहरण के लिए:) git reset --hard e870e41
।
(यदि आपने अपने परिवर्तन नहीं किए हैं ... तो आप मुश्किल में पड़ सकते हैं - जल्दी कमिट करें, और अक्सर कमिट करें! "
git log HEAD@{1}
। यदि वह कमिट की सही श्रृंखला की तरह दिखता है, तो आप कर सकते हैं git reset HEAD@{1}
।
git fsck --lost-found
।
जवाब देने से पहले, आइए कुछ पृष्ठभूमि जोड़ें, जिसमें बताया गया है कि यह क्या HEAD
है।
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
किसी भी परिवर्तन को प्रदर्शित करेगा जो अपडेट किया गया था HEAD
और वांछित रिफ्लग प्रविष्टि की जांच करके इस कमेटी को HEAD
वापस सेट कर देगा ।
हर बार जब संशोधित किया जाता है तो एक नई प्रविष्टि होगी reflog
git reflog
git checkout HEAD@{...}
यह आपको आपकी इच्छित कमिट पर वापस मिल जाएगा
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 rebase --no-autostash
।git revert <sha-1>
दी गई प्रतिबद्ध या प्रतिबद्ध सीमा को "पूर्ववत करें"।
रीसेट कमांड दिए गए कमिट में किए गए किसी भी बदलाव को "पूर्ववत" करेगा।
पूर्ववत पैच के साथ एक नई प्रतिबद्धता होगी, जबकि मूल प्रतिबद्धता इतिहास में भी रहेगी।
# Add a 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 reset --hard <commit_id>
, हटाने में , HEAD
काम किया! चित्रमय प्रतिनिधित्व के लिए +1 !!
git reflog <branchname>
काफी उपयोगी हो सकता है, क्योंकि आप सिर्फ एक शाखा के परिवर्तन देखते हैं।
हटाए गए कमिट में आने का दूसरा तरीका git fsck
कमांड के साथ है ।
git fsck --lost-found
यह अंतिम पंक्ति की तरह कुछ उत्पादन करेगा:
dangling commit xyz
हम जांच सकते हैं कि यह reflog
अन्य उत्तरों में सुझाए अनुसार उपयोग करने के लिए समान है। अब हम एक कर सकते हैंgit merge
git merge xyz
नोट: अगर हम पहले से ही एक कमांड चला चुके हैं, तो हम
कमिट वापस नहीं ले सकते, जो डैंगलिंग कमिट के संदर्भ को हटा देगा।fsck
git gc