আপনি যখন নিজের দ্বারা বা একটি দলের অংশ হিসাবে একটি প্রকল্পে কাজ করছেন, তখন এমন উদাহরণ হতে পারে যখন আপনি একটি প্রতিশ্রুতি পূর্বাবস্থায় ফেরাতে চান। git reset
কমান্ড হল একটি বাস্তব জীবন রক্ষাকারী হিসাবে পরিচিত সরঞ্জামগুলির মধ্যে একটি৷
Git's Tracking Mechanism
git reset
এ যাওয়ার আগে , আমাদের গিটের অন্তর্নিহিত কাঠামো সম্পর্কে বুঝতে হবে। গিট নোড এবং পয়েন্টার সহ গাছের মতো কাঠামোর মাধ্যমে ফাইলগুলি পরিচালনা করে এবং ট্র্যাক করে।
আপনার স্থানীয় গিট রিপোজিটরিতে মূলত এই তিনটি "গাছ" রয়েছে:
- ওয়ার্কিং ডিরেক্টরি :অথবা কাজের গাছ, এবং এটি আপনার স্থানীয় ডিরেক্টরি এবং
git status
বোঝায় আপনাকে আপনার কাজের ডিরেক্টরির অবস্থা দেবে। - হেড :শুধু আপনার বর্তমান শাখার শেষ কমিট স্ন্যাপশট। আপনি যদি
git checkout
দিয়ে শাখা পরিবর্তন করতে চান তারপর HEAD শাখার শেষ কমিটে পরিবর্তিত হবে। - সূচক :অথবা মঞ্চায়ন এলাকা তাই যখন আপনি
git add
ফাইলগুলি এই সূচীতে যোগ করে।
Git ওয়ার্কফ্লো
নিম্নলিখিত উদাহরণ দেখায় একটি ফাইলে পরিবর্তন করা এবং তারপর git add
ব্যবহার করে সূচীতে (স্টেজিং) যোগ করা তারপর git status
চেক করা হচ্ছে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি দেখতে৷
এখন যখন আমরা git commit
করি এটি আরও স্থায়ী স্ন্যাপশট হিসাবে সংরক্ষণ করে এবং সেই পয়েন্টারে মাস্টার এবং হেড আপডেট করে। তাই যদি আমরা git status
করি git commit
এর পরে , আমরা দেখতে পাব যে তিনটি গাছই একই অবস্থায় আছে (কমিট করার কিছু থাকবে না)।
তাহলে এর উদ্দেশ্য কি গিট রিসেট ?
আপনি হয়তো ভাবছেন কেন এই সমস্ত প্রস্তাবনা শুধু git reset
পেতে . আচ্ছা git reset
এই গাছগুলোকে বিভিন্নভাবে ব্যবহার করে। সুতরাং আপনি কি করতে চান তার উপর নির্ভর করে গিট রিসেট বিভিন্ন বিকল্প গ্রহণ করবে।
Git রিসেট মোড
ধরা যাক আমরা কিছু পরিবর্তন এবং ফাইলের প্রতিশ্রুতি দিয়েছি, তারপর বুঝতে পারি যে আমরা সেগুলিকে ভুল শাখায় প্রতিশ্রুতিবদ্ধ করেছি বা আমাদের প্রতিশ্রুতি বাগে আছে তাই আমরা রিওয়াইন্ড করতে চাই। গিট রিসেট মোড সম্পর্কে জানা এখানে দরকারী।
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।
মোড সহ সমস্ত গিট রিসেট হেড পয়েন্টার আপডেট করবে। এটিতে নিম্নলিখিত সিনট্যাক্স রয়েছে
git reset <mode> <commit-optional>
প্রধান মোডগুলি হল:
--soft
:হেড পয়েন্টার রিসেট করে এবং ইনডেক্স এবং ওয়ার্কিং ডাইরেক্টরীকে স্পর্শ না করে রাখে। সুতরাং আপনার হেড রিসেট করা হবে এবং অন্যান্য গাছগুলি এখনও সর্বশেষ পরিবর্তনগুলি দেখাচ্ছে৷--mixed
:ডিফল্ট বিকল্প হেড এবং ইনডেক্স রিসেট করে। এটি মূলত আপনার সমস্ত পরিবর্তনগুলি আন-স্টেজ করে এবং আপনিgit add
করার আগে আপনাকে ছেড়ে দেয় . দ্রষ্টব্য: আপনি যদি কোনো বিকল্প ছাড়াই নিজেই গিট রিসেট করেন, তাহলে এটিকেgit reset --mixed
হিসেবে ব্যাখ্যা করা হবে .--hard
:এটির সাথে সতর্ক থাকুন . HEAD, index রিসেট করার পাশাপাশি, এটি আপনার ওয়ার্কিং ডিরেক্টরি রিসেট করে। তাই আপনি লিখিত কোড হারাতে পারেন! এটি বর্তমান HEAD পয়েন্টার (শেষ প্রতিশ্রুতি) বাতিল করার পরে যেকোনো পরিবর্তন হিসাবে।
অন্যান্য মোড যেমন --merge
এবং --keep
অফিসিয়াল ডকুমেন্টেশনে পড়া যেতে পারে।
উপযোগী গিট রিসেট কৌশল
একটি প্রতিশ্রুতি রিওয়াইন্ড করা৷
মনে রাখবেন যে যদি আমরা মোডটি বাদ দেই (কোনও বিকল্প ছাড়াই গিট রিসেট) এটিকে -মিশ্রিত হিসাবে ব্যাখ্যা করা হবে।
এখন যদি আমরা শুধু git reset HEAD
টাইপ করি কিছুই হবে না, কিন্তু যদি আমরা git reset HEAD~1
করি তাহলে আমাদের হেড এখন তার আগের প্রতিশ্রুতির দিকে নির্দেশ করবে।
নিম্নলিখিত উদাহরণ পূর্ববর্তী এক থেকে অব্যাহত. ধরুন আমরা আমাদের নমুনা ফাইলে নতুন টেক্সট যোগ করি। তারপর আমরা যোগ এবং কমিট গিট. তারপরে আমরা গিট রিসেট HEAD~1 করার পরে, আমাদের সমস্ত পরিবর্তনগুলি অ-পর্যায়ভুক্ত এবং পূর্ববর্তী প্রতিশ্রুতিতে রয়েছে৷
যখন আমরা একটি প্রতিশ্রুতি পূর্বাবস্থায় ফিরিয়ে আনতে চাই তখন এটি একটি কার্যকর এবং দ্রুত উপায়!
একটি নির্দিষ্ট ফাইল আন-স্টেজিং
ধরা যাক আপনি গিট অ্যাড দিয়ে ইনডেক্সে একটি ফাইল যুক্ত করেছেন। আমরা এই ফাইলটি সরিয়ে ফেলতে পারি:
git reset HEAD <file-name>
পরিস্থিতি:আমি আমার সমস্ত কোড এলোমেলো করেছি! আমি কি ফিরে যেতে পারি যখন এটি কাজ করছিল?
আপনি যদি সমস্ত স্থানীয় পরিবর্তনগুলি ফেলে দিতে চান এবং আপনার পূর্ববর্তী প্রতিশ্রুতিতে ফিরে যেতে চান তবে আপনার শেষ অবলম্বন হল git reset --hard
.
প্রায়শই আপনি যদি আপনার কোডটি ভাঙ্গেন তবে এটি আপনার একমাত্র বিকল্প হতে পারে। আপনি যদি কমিট হ্যাশ জানেন তবে আপনি do git reset --hard <commit>
করতে পারেন . কিন্তু মনে রাখবেন এটি নির্দিষ্ট প্রতিশ্রুতির (যদি থাকে) পরে অন্য যেকোন কমিটকেও প্রভাবিত করবে!
পরিস্থিতি:এই প্রতিশ্রুতিটি একটি নতুন শাখায় হওয়ার কথা ছিল!
এটি প্রায়ই ঘটে, বিশেষ করে যখন আপনি উৎপাদনে কাজ শুরু করেন। যদি আপনার সাথে এটি ঘটে থাকে তবে আতঙ্কের কিছু নেই!
আমাদের যা করতে হবে তা হল নতুন শাখা তৈরি করা যাতে শাখাটির অবস্থা আমাদের রিওয়াইন্ড করতে হবে। তারপরে আমরা প্রভাবিত শাখাটি পুনরায় সেট করব এবং তারপরে আমরা নতুন শাখায় চেকআউট করব এবং সেখানে প্রতিশ্রুতিগুলি করব:
git branch new-branch
git reset HEAD~1 --hard
git checkout new-branch
জীবন রক্ষাকারী ঠিক
একটি শেষ কথা
git reset --hard
করার সময় সতর্ক থাকুন এবং একটি নির্দিষ্ট প্রতিশ্রুতিতে রিওয়াইন্ড করার সময়, বিশেষ করে প্রোডাকশন কোডে এবং যখন আপনি অন্যান্য বিকাশকারীদের সাথে কাজ করছেন। প্রায়শই গিট রিভার্ট এই পরিবর্তনগুলি করার নিরাপদ উপায়। কিন্তু সেটা অন্য সময়ের জন্য কথোপকথন। তখন পর্যন্ত! 👋🏼