আপনি দুটি শাখায় একটি ফাইল পরিবর্তন করতে পারবেন না এবং ফাইলটি জমা বা আটকে না রেখে সেই শাখাগুলির মধ্যে স্যুইচ করতে পারবেন না। এর কারণ হল গিট অনিশ্চিত যে কোন পরিবর্তনগুলি সংরক্ষণ করা উচিত এবং কোন পরিবর্তনগুলি ওভাররাইট করা উচিত।
এই নির্দেশিকা "নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তনগুলি চেকআউট দ্বারা ওভাররাইট করা হবে" এবং এর অর্থ কী তা নিয়ে আলোচনা করে৷ আমরা একটি উদাহরণ দিয়ে হেঁটে যাব যাতে আপনি এই ত্রুটিটি কীভাবে ঠিক করবেন তা বের করতে পারেন৷
৷নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তন চেকআউট দ্বারা ওভাররাইট করা হবে
গিট সংস্করণ নিয়ন্ত্রণ আপনাকে বিকাশের পৃথক লাইন বজায় রাখতে দেয়, যাকে শাখা বলা হয়। একটি শাখার পরিবর্তনগুলি অন্য শাখায় প্রতিফলিত হয় না যদি না আপনি দুটি শাখাকে একত্রিত করেন।
আপনি যখন একটি শাখায় নেভিগেট করেন, আপনি তার ইতিহাসের একটি নির্দিষ্ট সময়ে সংগ্রহস্থলটি দেখতে পারেন এবং আপনার প্রয়োজনীয় পরিবর্তনগুলি করতে পারেন। আপনি যখন প্রস্তুত থাকবেন তখন আপনার করা পরিবর্তনগুলি করা উচিত যাতে গিট আপনার প্রকল্পের বিবর্তনের উপর নজর রাখে।
আপনি দুটি শাখার মধ্যে স্যুইচ করতে পারবেন না যদি উভয় শাখায় একটি অপ্রয়োজনীয় ফাইল পরিবর্তন থাকে। একটি ফাইল সংরক্ষণ করা উচিত বা একটি প্রতিশ্রুতির অংশ কিনা তা গিটকে জানতে হবে। এটি আপনাকে দুর্ঘটনাক্রমে ওভাররাইট করা কোড থেকে রক্ষা করে যা আপনি পরে উল্লেখ করতে চাইতে পারেন৷
৷একটি উদাহরণ দৃশ্য
আমরা একটি সংগ্রহস্থল ক্লোন করতে যাচ্ছি যাতে README.md নামে একটি ফাইল রয়েছে:
git clone https://github.com/career-karma-tutorials/ck-git
README.md ফাইলের বিষয়বস্তু নিম্নরূপ:
# ck-git
আমাদের সংগ্রহস্থলের দুটি শাখা রয়েছে:বিকাশ এবং মাস্টার। আমাদের স্থানীয় কাজের ডিরেক্টরিতে, আমরা অরিজিন মাস্টার শাখায় README.md ফাইলটি পরিবর্তন করতে যাচ্ছি:
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।
# Career Karma Git
আমাদের মাস্টার ব্রাঞ্চ এখন আমাদের রিমোট রিপোজিটরি থেকে আলাদা। আমরা আমাদের উন্নয়ন শাখায় স্যুইচ করতে যাচ্ছি এবং এর README এর বিষয়বস্তু পরিবর্তন করতে যাচ্ছি:
# Career Karma [Development]
আমরা এই কমান্ডগুলি সম্পাদন করে উন্নয়ন শাখায় এই ফাইলটি পরিবর্তন করতে পারি:
git checkout development nano README.md
এরপরে, মাস্টার ব্রাঞ্চে ফিরে যান, শাখায় করা পরিবর্তনগুলি কমিট করুন এবং সেগুলিকে আমাদের রিমোট রিপোজিটরিতে ঠেলে দিন:
git checkout master git add README.md git commit -m "docs: Update README" git push
গিট চেকআউট কমান্ড আমাদেরকে মাস্টার শাখায় যেতে দেয়। পর্যালোচনায়, আমাদের দূরবর্তী সংগ্রহস্থলে এখন রয়েছে:
- উন্নয়ন শাখায় একটি পরিবর্তিত README.md
- একটি মাস্টার শাখা যা এগিয়ে আছে এক প্রতিশ্রুতি
এখন, মাস্টার শাখায় আবার আমাদের README.md পরিবর্তন করা যাক:
# Tutorials
এর অর্থ উভয় শাখাই দূরবর্তী মাস্টার শাখার মধ্যে পার্থক্য ধারণ করে। চলুন এই পরিবর্তনগুলি রেখে আমাদের উন্নয়ন শাখায় যাওয়ার চেষ্টা করি:
git checkout development
এই কমান্ডটি একটি ত্রুটি বার্তা প্রদান করে:
error: Your local changes to the following files would be overwritten by checkout: README.md Please commit your changes or stash them before you switch branches. Aborting
সমাধান
যেহেতু আমাদের ডেভেলপমেন্ট এবং মাস্টার শাখায় অপ্রতিরোধ্য পরিবর্তন রয়েছে, গিট চেকআউটের সাথে এগিয়ে যেতে পারে না। যদি গিট এগিয়ে যায়, মাস্টার শাখায় আমাদের README.md-এ আমরা যে অনিয়মিত পরিবর্তন করেছি তা সংরক্ষিত হবে না।
আমরা এই ত্রুটিটি দুটি উপায়ে ঠিক করতে পারি। প্রথমত, আমরা মাস্টার শাখায় আমাদের পরিবর্তনগুলি করতে পারি:
git add README.md git commit -m "docs: Add tutorials message to README.md file" git push
এই কমান্ডগুলিতে, আমরা স্টেজিং এরিয়াতে README.md ফাইল যোগ করি, স্টেজিং এরিয়া থেকে সমস্ত ফাইল একটি কমিট-এ যোগ করি এবং আমরা আমাদের পরিবর্তনকে রিমোট রিপোজিটরিতে পুশ করি।
আমাদের README.md ফাইলটি আমরা যে পরিবর্তনগুলি করেছি তার সাথে কীভাবে উপস্থিত হয় তার একটি রেকর্ড এখন গিট-এ রয়েছে।
বিকল্পভাবে, আমরা আমাদের পরিবর্তনগুলিকে পরবর্তীতে লুকিয়ে রাখতে পারি। এটি একটি ভাল সমাধান যদি আপনি আপনার পরিবর্তনগুলিকে পরে অ্যাক্সেসযোগ্য করতে চান যখন আপনি এখনও একটি প্রতিশ্রুতিতে পরিবর্তনগুলি যোগ করতে প্রস্তুত নন। আপনার পরিবর্তনগুলি লুকিয়ে রাখতে, আপনি গিট স্ট্যাশ কমান্ডটি চালাতে পারেন:
git stash save README.md
এটি আমাদের README.md ফাইলটিকে একটি স্ট্যাশে সংরক্ষণ করবে। যখনই আমরা এই ফাইলটি পুনরায় দেখার জন্য প্রস্তুত থাকি, আমরা stash pop কমান্ড ব্যবহার করে stash অ্যাক্সেস করতে পারি:
git stash pop
এই কমান্ডটি আমাদের সংগ্রহস্থলে README.md ফাইলটি পুনরুদ্ধার করবে। "স্ট্যাশিং" হল "পরের জন্য সংরক্ষণ" বলার আরেকটি উপায়। স্ট্যাশ আপনার পরিবর্তনের প্রতিশ্রুতি তৈরি করে না।
আমরা উপরের সমাধানগুলির একটি চালানোর পরে, আমরা সফলভাবে উন্নয়ন শাখায় নেভিগেট করতে পারি:
git checkout development
এই কমান্ডটি আমাদের শাখাকে "উন্নয়ন"-এ পরিবর্তন করে এবং আমাদের টার্মিনালে এই পরিবর্তন সম্পর্কে আমাদের জানায়:
Switched to branch 'development'
আমরা সমস্যার সমাধান করেছি৷
উপসংহার
Git "নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তনগুলি চেকআউটের মাধ্যমে ওভাররাইট করা হবে" ত্রুটি দেখা দেয় যখন আপনি দুটি শাখায় পরিবর্তনগুলিকে প্রতিশ্রুতিবদ্ধ না করে বা আটকে না রেখে এবং শাখাগুলির মধ্যে নেভিগেট করার চেষ্টা করেন৷
আপনি পরবর্তীতে আপনার পরিবর্তনগুলিকে লুকিয়ে রেখে অথবা একটি প্রতিশ্রুতিতে যোগ করে এই সমস্যাটির সমাধান করতে পারেন৷
এখন আপনার কাছে এই ত্রুটিটি একজন পেশাদারের মতো ঠিক করার জন্য প্রয়োজনীয় জ্ঞান রয়েছে!