Git-এ HEAD কী?

HEAD হলো একটা pointer, যা নির্দেশ করে আপনি এখন repository-র কোন জায়গায় দাঁড়িয়ে আছেন। সহজভাবে বললে — "আপনি এখন এখানে আছেন" চিহ্ন।

স্বাভাবিক অবস্থায় HEAD সরাসরি কোনো commit-কে point করে না, বরং একটা branch-কে point করে, আর সেই branch তখন সর্বশেষ commit-কে point করে:

HEAD → main → commit (a1b2c3d)

আপনি নতুন commit করলে branch pointer এগিয়ে যায়, আর HEAD যেহেতু branch-কে ধরে আছে, সে-ও সাথে সাথে এগোয়। .git/HEAD ফাইলটা খুললে দেখবেন লেখা আছে:

ref: refs/heads/main

Detached HEAD কী?

যখন HEAD কোনো branch-কে point না করে সরাসরি একটা নির্দিষ্ট commit-কে point করে, তখন সেই অবস্থাকে বলে detached HEAD:

HEAD → commit (a1b2c3d)     ← কোনো branch নেই মাঝখানে

সাধারণত এই অবস্থায় পড়েন যখন:

git checkout a1b2c3d        # সরাসরি commit hash-এ checkout
git checkout v2.1.0         # কোনো tag-এ checkout
git checkout origin/main    # remote branch-এ সরাসরি checkout

সমস্যাটা কোথায়? Detached HEAD অবস্থায় আপনি code দেখতে, build করতে, এমনকি commit করতেও পারবেন। কিন্তু নতুন commit-গুলো কোনো branch-এর সাথে যুক্ত থাকে না। ফলে আপনি অন্য কোথাও checkout করে চলে গেলে সেই commit-গুলো "অনাথ" হয়ে যায় — কোনো reference না থাকায় Git একসময় garbage collection-এ সেগুলো মুছে ফেলতে পারে।

Detached HEAD থেকে বের হওয়ার উপায়

পরিস্থিতি ১: শুধু ঘুরে দেখছিলেন, কোনো পরিবর্তন করেননি

সোজা কোনো branch-এ ফিরে যান:

git switch main
# বা পুরনো syntax-এ: git checkout main

ব্যস, HEAD আবার branch-এর সাথে যুক্ত হয়ে গেল।

পরিস্থিতি ২: Detached অবস্থায় commit করে ফেলেছেন এবং সেগুলো রাখতে চান

Commit-গুলোকে একটা নতুন branch-এ বেঁধে ফেলুন:

git switch -c my-new-branch
# বা: git checkout -b my-new-branch

এতে বর্তমান commit থেকে নতুন branch তৈরি হবে, HEAD সেটাকে point করবে, আর আপনার কাজ নিরাপদ থাকবে।

পরিস্থিতি ৩: Commit করেছিলেন কিন্তু branch না বানিয়েই বেরিয়ে এসেছেন

চিন্তা নেই, reflog দিয়ে হারানো commit খুঁজে বের করা যায়:

git reflog                          # হারানো commit-এর hash খুঁজুন
git branch recovery-branch a1b2c3d  # সেই hash থেকে branch বানান

Reflog সাধারণত ৩০–৯০ দিন পর্যন্ত history রাখে, তাই garbage collection-এর আগে ফিরে পাওয়ার সুযোগ থাকে।

Share