উত্তর দেওয়ার আগে আসুন এটি কী তা ব্যাখ্যা করে কিছু পটভূমি যুক্ত করা যাক HEAD
।
First of all what is HEAD?
HEAD
কেবলমাত্র বর্তমান শাখায় বর্তমান প্রতিশ্রুতি (সর্বশেষ) এর একটি উল্লেখ। যে কোনও সময়
কেবলমাত্র একা HEAD
থাকতে পারে (বাদে git worktree
)।
এর সামগ্রীটি HEAD
ভিতরে সঞ্চিত .git/HEAD
রয়েছে এবং এতে বর্তমান প্রতিশ্রুতিতে 40 বাইট এসএইএ -1 রয়েছে।
detached HEAD
আপনার উপর না হন, তাহলে সর্বশেষ কমিট - অর্থ যে HEAD
একটি পূর্বে নির্দেশ করা হয় ইতিহাস বলা হচ্ছে এ কমিট detached HEAD
।
কমান্ড লাইনে এটি দেখতে এইরকম হবে - শাখার নামের পরিবর্তে SHA-1 যেহেতু HEAD
বর্তমান শাখার অগ্রভাগের দিকে ইশারা করছে না:
বিচ্ছিন্ন হেড থেকে কীভাবে পুনরুদ্ধার করবেন সে সম্পর্কে কয়েকটি বিকল্প:
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>
আপনি সর্বদা reflog
পাশাপাশি ব্যবহার করতে পারেন ।
git reflog
আপডেট হওয়া যে কোনও পরিবর্তন প্রদর্শন করবে HEAD
এবং কাঙ্ক্ষিত রিফ্লগ এন্ট্রি চেক HEAD
করা এই প্রতিশ্রুতিতে ফিরে আসবে।
যতবারই হেডের সংশোধন করা হয় সেখানে একটি নতুন প্রবেশ থাকবে reflog
git reflog
git checkout 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.
- দ্রষ্টব্য: ( গিট ২.7 থেকে ) আপনি এটিও ব্যবহার করতে পারেন
git rebase --no-autostash
।
প্রদত্ত প্রতিশ্রুতি বা প্রতিশ্রুতি ব্যাপ্তি "পূর্বাবস্থায় ফিরিয়ে দিন"।
রিসেট কমান্ড প্রদত্ত প্রতিশ্রুতিতে যে কোনও পরিবর্তন "পূর্বাবস্থায়" ফেলবে।
পূর্বাবস্থার প্যাচ নিয়ে একটি নতুন প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ হবে যখন মূল প্রতিশ্রুতি ইতিহাসেও থাকবে।
# 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 checkout 23b6772
করা উচিত.