কম্পিউটার টিউটোরিয়াল

Git Detached HEAD: কারণ এবং সমাধান

আপনি যদি detached HEAD সমস্যায় না পড়েন, তবুও এটি জানা গুরুত্বপূর্ণ যাতে আপনি এটা এড়াতে পারেন। একটি সুপারিশ হিসেবে detached HEAD-এ কমিট করবেন না কিন্তু আপনি যদি করেন, আমরা দেখাব কীভাবে আপনার কমিটগুলো সংরক্ষণ করবেন।

একটি রিমাইন্ডার

HEAD কী সেটি বুঝতে, চলুন Git-এর অন্তর্নিহিত ট্রি-লাইক স্ট্রাকচার-এ একটি রিফ্রেশার করি।

  1. দ্যা ওয়ার্কিং ডিরেক্টরি: অথবা ওয়ার্কিং ট্রি। এটি আপনার লোকাল ডিরেক্টরি রেফার করে এবং git status আপনাকে আপনার ওয়ার্কিং ডিরেক্টরির স্টেট দেবে।
  2. HEAD: এটি শুধু আপনার কারেন্ট ব্রাঞ্চের লাস্ট কমিট স্ন্যাপশট। আপনি যদি ব্রাঞ্চ সুইচ করেন git checkout দিয়ে, তবে HEAD পরিবর্তন করবে সেই ব্রাঞ্চের লাস্ট কমিটে।
  3. ইন্ডেক্স: অথবা স্টেজিং এরিয়া, তাই যখন আপনি git add ফাইলগুলো কমিট করার জন্য যোগ করেন, সেগুলো এই ইন্ডেক্সে যোগ হয়।

অ্যাটাচড HEAD বোঝা

এখন আমরা বুঝতে পারছি HEAD শুধু আপনার কারেন্ট ব্রাঞ্চের লেটেস্ট কমিট। git status করলে এটি আপনার ব্রাঞ্চ বলে দেবে যেমন On branch master এবং git log করলে আপনার কমিট হিস্ট্রি দেখাবে ইনফরমেশনসহ যেন:

commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD) Author: Felipe <email> Date: Wed Sep 29 22:57:59 2020 -0500

তারপর যদি আমরা আমাদের ব্রাঞ্চ পরিবর্তন করি ডেভেলপমেন্ট ব্রাঞ্চে git checkout development দিয়ে, তবে HEAD মুভ করবে লাস্ট কমিটে। তাই এই সব নরমাল কেসে হেড ফলো করে আমাদের সাথে যুক্ত থাকারভাবে যেমন সেটি একটি ব্রাঞ্চের লাস্ট কমিটে আটাচড থাকা উচিত।

HEAD ডিট্যাচ করা

আমাদের HEAD ডিট্যাচ করার দুটি উপায় আছে।

  • git checkout --detach কমান্ড ব্যবহার করে।
  • একটি কমিট হ্যাশে চেকআউট করে। যেমনঃ উপরের কমিট ব্যবহার করে git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
  • যেকোনো ব্রাঞ্চে ^0 যোগ করে। যেমনঃ git checkout master^0।

আমি নিশ্চিত নই আপনি ইচ্ছাকৃতভাবে HEAD ডিট্যাচ করতে চান কিনা। তাই সবচেয়ে সাধারণ কেস হলো ভুলে আপনি একটি ব্রাঞ্চে চেকআউট করতে চেয়েছিলেন এবং ব্রাঞ্চ নামের বদলে একটি কমিট হ্যাশ ব্যবহার করলেন।

একটি detached HEAD-এর পর কী হয়? আপনি একটি ওয়ার্নিং পেতে পারেন এই রকম:

$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0 Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

একবার detached HEAD এনভায়রনমেন্টে যাওয়ার পর, আপনি যদি git status করেন এমনকি আপনি পরিবর্তন করলেও, এটি কিছু এই রকম বলবে:

৮১% পার্টিসিপেন্ট заяви করেছেন যে বুটক্যাম্পে অংশগ্রহণের পর তাদের টেক জব প্রস্পেক্টস নিয়ে তারা আরও আত্মবিশ্বাসী মনে করছেন। আজই একটি বুটক্যাম্পে ম্যাচ করুন।

গড় বুটক্যাম্প গ্র্যাজুট ক্যারিয়ার ট্রানজিশনে ছয় মাসের কম সময় ব্যয় করেছেন, বুটক্যাম্প শুরু থেকে প্রথম জব পাওয়ার পর্যায়ে।

HEAD detached at ac63806 nothing to commit, working tree clean

তো এটি হবে যেন আপনি টাইমে ফ্রোজেন আছেন এবং আপনি যা করছেন সেটি সব হারিয়ে যাচ্ছে, বা মেরে যাওয়ায় না। কেন? ভালো কারণ HEAD কোনো কিছুর দিকে পয়েন্ট করছে না।

কিছু লোক এইটাকে উপকারী মনে করেন একটি রিপোজিটরির পূর্বের স্টেট এক্সপ্লোর করার জন্য যেকোনো ব্রেক করার চিন্তা ছাড়া।

HEAD পুনরায় অ্যাটাচ করা

আপনাকে বুঝতে হবে যে আপনার যেকোনো ব্রাঞ্চগুলো প্রভাবিত হবে না আপনি যদি কখনো detached state-এ যান। এখন, HEAD পুনরায় অ্যাটাচ করার সেরা উপায় হলো একটি নতুন ব্রাঞ্চ তৈরি করা।

আমরা এটি সিম্পলি git checkout -b <branch-name> দিয়ে করতে পারি।

যদি আমরা বুঝতে না পারি আমরা HEAD ছাড়া আছি এবং পরিবর্তন করা শুরু করি? এখানে আমাদের একটি টেম্পরারি ব্রাঞ্চ তৈরি করতে হবে এবং সেটিকে সেটি ব্রাঞ্চে মার্জ করতে হবে যেটিতে আমাদের কমিট করতে হবে। উদাহরণস্বরূপ:

git checkout -b temp-branch git checkout master git merge temp-branch

এটি আপনার টেম্পরারি ব্রাঞ্চ থেকে পরিবর্তনগুলো কমিট করবে যে ব্রাঞ্চে আপনার দরকার। এই কেসে master।

উপসংহার

আজ আমরা শিখলাম কীভাবে আমাদের HEAD ডিট্যাচ করতে হয় (নয় শाब্দিকভাবে) এবং পরে কী করতে হয়। Git-এর আંતরিক কাজকর্মে HEAD কী সেটি বোঝা আমাদের স্পেশাল কেসগুলো বুঝতে সাহায্য করতে পারে যেন detached HEAD।

আমরা এও শিখলাম চিন্তা না করুন আপনি যদি কখনো detached HEAD state-এ পড়েন। শুধু মনে রাখবেন যে যেহেতু আপনার HEAD লুজ, পরিবর্তন এবং কমিটগুলো কোথাও রিফ্লেক্ট হবে না। তাই নিশ্চিত করুন আপনি HEAD কে আবার যথাযথভাবে রি-অ্যাটাচ করেছেন।


  1. Git Cannot open .git/FETCH_HEAD: Permission denied সমাধান

  2. Git Detached HEAD: কারণ এবং সমাধান

  3. Git Reset: কমিট রিয়ার্ন করার টুল

  4. HTML <head> ট্যাগ