গিটের reset কমান্ডটি মূলত তিনটি ভিন্ন মোডে কাজ করে: --soft, --mixed (ডিফল্ট), এবং --hard। এগুলোর মধ্যে মূল পার্থক্য হলো তিনটি জিনিসের সাথে তারা কী করে— ১. HEAD (বর্তমান ব্রাঞ্চের পয়েন্টার) ২. Staging Area / Index (যে জায়গায় git add করা ফাইল থাকে) ৩. Working Directory (আপনার কম্পিউটারের আসল ফাইল যেখানে আপনি কাজ করছেন)

নিচে প্রতিটি কমান্ডের কাজ বিস্তারিতভাবে ব্যাখ্যা করা হলো:


১. git reset --soft <commit>

এটি সবচেয়ে নিরাপদ রিসেট।

  • HEAD-এর সাথে কী হয়? → HEAD-কে নির্দিষ্ট কমিটে সরিয়ে নেয়।
  • Staging Area-এর সাথে কী হয়?কিছুই হয় না। Staging Area যেমন ছিল তেমনই থাকে।
  • Working Directory-এর সাথে কী হয়?কিছুই হয় না। আপনার লেখা ফাইলগুলোর কোনো পরিবর্তন হয় না।

ব্যবহারিক উদাহরণ:
ধরুন, আপনি ৩টি কমিট করেছেন (C1 → C2 → C3)। এখন git reset --soft C1 করলে—

  • HEAD চলে যাবে C1-এ।
  • কিন্তু C2 এবং C3-এর সব পরিবর্তন Staging Area-তে রয়ে যাবে (যেন আপনি git add করে রেখেছেন)।
  • Working Directory-তেও সব পরিবর্তন থাকবে।

কখন ব্যবহার করবেন?
যখন আপনি শেষ কয়েকটি কমিট একসঙ্গে মিশিয়ে (squash) একটি নতুন কমিট করতে চান। কারণ সব পরিবর্তন ইতিমধ্যে staged অবস্থায় থাকায় আপনি সহজেই আবার কমিট করতে পারেন।


২. git reset --mixed <commit> (এটি ডিফল্ট)

এটি মাঝারি স্তরের রিসেট।

  • HEAD-এর সাথে কী হয়? → HEAD-কে নির্দিষ্ট কমিটে সরিয়ে নেয়।
  • Staging Area-এর সাথে কী হয়? → Staging Area রিসেট হয়ে যায় (পরিষ্কার হয়ে যায়)।
  • Working Directory-এর সাথে কী হয়?কিছুই হয় না। আপনার লেখা ফাইলগুলোর কোনো পরিবর্তন হয় না।

ব্যবহারিক উদাহরণ:
আবার সেই ৩টি কমিটের উদাহরণ। git reset --mixed C1 করলে—

  • HEAD চলে যাবে C1-এ।
  • C2 এবং C3-এর পরিবর্তনগুলো Staging Area থেকে সরিয়ে দেওয়া হবে (অর্থাৎ unstage অবস্থায় চলে আসবে)।
  • কিন্তু Working Directory-তে সব পরিবর্তন অক্ষত থাকবে (আপনি যেখানে কাজ করছেন সেখানেই ফাইলগুলো পরিবর্তিত অবস্থায় পড়ে থাকবে)।

কখন ব্যবহার করবেন?
যখন আপনি আপনার করা পরিবর্তনগুলো রাখতে চান, কিন্তু সেগুলোকে আলাদা আলাদাভাবে পর্যালোচনা করে নতুন করে Stage (add) করতে চান। অথবা যখন ভুলবশত git add করে ফেলেছেন এবং সেটা আন-স্টেজ করতে চান (এটি git reset-এর সবচেয়ে সাধারণ ব্যবহার)।


৩. git reset --hard <commit>

এটি সবচেয়ে বিপজ্জনক এবং স্থায়ী রিসেট।

  • HEAD-এর সাথে কী হয়? → HEAD-কে নির্দিষ্ট কমিটে সরিয়ে নেয়।
  • Staging Area-এর সাথে কী হয়? → Staging Area পরিষ্কার (রিসেট) হয়ে যায়।
  • Working Directory-এর সাথে কী হয়? → Working Directory-ও পুরোপুরি রিসেট হয়ে যায় এবং নির্দিষ্ট কমিটের অবস্থায় ফিরে যায়।

ব্যবহারিক উদাহরণ:
git reset --hard C1 করলে—

  • HEAD চলে যাবে C1-এ।
  • C2 এবং C3-এর সব পরিবর্তন Staging Area থেকে এবং Working Directory থেকে পুরোপুরি মুছে যাবে
  • আপনার ফাইলগুলো C1-এর মতো অবস্থায় ফিরে যাবে। আপনি যতই নতুন কোড লিখে থাকুন না কেন, সব অটুট (unstaged) পরিবর্তন চিরতরে হারিয়ে যাবে

কখন ব্যবহার করবেন?
যখন আপনি নিশ্চিত যে শেষ কয়েকটি কমিটের সব পরিবর্তন আপনার দরকার নেই এবং আপনি সম্পূর্ণরূপে পুরনো অবস্থায় ফিরে যেতে চান। সাবধান! এই কমান্ডের পরে পরিবর্তন উদ্ধার করা অনেক কঠিন (যদি না আপনি git reflog ব্যবহার করেন)।


সংক্ষিপ্ত তুলনা টেবিল

রিসেট টাইপ HEAD-এর গতি Staging Area-এর অবস্থা Working Directory-এর অবস্থা ঝুঁকির মাত্রা
--soft সরানো হয় অপরিবর্তিত (stage করা অবস্থায় থাকে) অপরিবর্তিত সবচেয়ে কম
--mixed (ডিফল্ট) সরানো হয় রিসেট (পরিষ্কার / unstage হয়) অপরিবর্তিত মাঝারি
--hard সরানো হয় রিসেট (পরিষ্কার হয়) রিসেট (সব পরিবর্তন মুছে যায়) সবচেয়ে বেশি (স্থায়ী)

চাক্ষুষ উদাহরণ (ভিজুয়ালাইজেশন)

ধরুন, আপনার বর্তমান অবস্থা:

Working Directory:  (আপনি ফাইল এডিট করেছেন)
Staging Area:      (git add করা আছে)
HEAD → C3 (সর্বশেষ কমিট)

১. git reset --soft C1 করলে:

HEAD → C1
Staging: (C2+C3-এর পরিবর্তন staged অবস্থায় আছে)
Working: (আপনার এডিট করা পরিবর্তনগুলো আছে)

২. git reset --mixed C1 করলে:

HEAD → C1
Staging: (খালি / পরিষ্কার)
Working: (আপনার এডিট করা পরিবর্তনগুলো আছে, কিন্তু এখন unstage)

৩. git reset --hard C1 করলে:

HEAD → C1
Staging: (খালি)
Working: (C1-এর অবস্থায় ফিরে গেছে — সব নতুন পরিবর্তন মুছে গেছে)

কোনটি কখন ব্যবহার করবেন?

  • --soft → যখন আপনি কমিট গুলো একত্রিত (squash) করতে চান, কিন্তু কাজ করা ফাইল বা stage করা ফাইল নষ্ট করতে চান না।
  • --mixed → যখন আপনি ভুলবশত git add করে ফেলেছেন এবং সেটা আবার আন-স্টেজ করতে চান (অর্থাৎ git reset দিয়ে শুধু staging পরিষ্কার করতে চান)।
  • --hard → যখন আপনি নিশ্চিত যে আপনার সব অসমাপ্ত কাজ বাদ দিতে চান এবং সম্পূর্ণ নতুন করে পুরনো কমিট থেকে শুরু করতে চান। ব্যবহারের আগে দুবার ভাবুন!
Share