মূলঃ How to undo changes in Git, লেখকঃ Zell Liew
আপনি হয়তোবা ইতোমধ্যেই জানেন যে গিট একটি সেভ পয়েন্ট সিস্টেমের মতো কাজ করে। প্রথমদিকে গিট এর যে কাজটি শেখা হয় তা হলো আপনার কাজের পরিবর্তনগুলো সেভ করে একটি রিমোট রিপোজিটরিতে কমিট করা। কিন্তু একটি পরিবর্তনকে আপনি পূর্বাবস্থায় কীভাবে ফিরিয়ে নিয়ে যাবেন?
এ আর্টিকেল এ আমরা সেটিই আলোচনা করবো।
লোকাল বনাম রিমোট
ইতোমধ্যেই রিমোট এ থাকা কোনকিছুকে পূর্বাবস্থায় ফিরিয়ে নিয়ে যাওয়া বেশ জটিল। এজন্য নিশ্চিত না হওয়া পর্যন্ত আপনার সকল জিনিস লোকাল-এই রাখা উচিত।
চারটি কমন সিনারিও
- লোকাল চেঞ্জ ডিসকার্ড করা
- আগের কমিট সংশোধন (amend) করা
- আগের একটি কমিট এ ফিরে যাওয়া
- ইতোমধ্যেই রিমোট এ পুশ করা একটি কমিটকে রিভার্ট করা
উল্লেখ্যঃ নিচের স্ক্রিনশটগুলোতে আমি Fork for Mac OS গিট ক্লায়েন্ট ব্যবহার করেছি। আপনি অনুরূপ অন্যান্য গিট ক্লায়েন্ট ব্যবহার করেও একই কাজ করতে পারেন।
সিনারিও ১ঃ লোকাল পরিবর্তন পরিত্যাগ করা
প্রথম উদাহরণটি হচ্ছে আপনি যখন আপনার কোডে কিছু পরিবর্তন করেছেন, কিন্তু এখনো কমিট করেননি। আর আপনি এ পরিবর্তনগুলো মুছে ফেলতে চান।
ধরুন আমরা একটি নতুন বৈশিষ্ট্য তৈরী করতে চাই। আমরা প্রোজেক্ট এ কিছু HTML এবং CSS যোগ করবোঃ
<!--In index.html-->
<div class="feature"></div>
/* In CSS file */
.feature {
font-size: 2em;
/* Other styles */
}
এ পরিবর্তনগুলো মুছে ফেলতে চাইলেঃ
- স্টেজিং এরিয়াতে যান
- যে পরিবর্তনগুলো বাদ দিতে চান সে ফাইলগুলো নির্বাচন করুন
- ফাইলগুলোতে রাইট ক্লিক করুন
- "discard changes" নির্বাচন করুন

সিনারিও ২ঃ আগের কমিট সংশোধন করা
যখন আপনি একটি কমিট করেছেন কিন্তু মেসেজে কিছু পরিবর্তনের কথা যুক্ত করতে ভুলে গেছেন, এবং আপনি আগের কমিট মেসেজ এ এই পরিবর্তনগুলো যুক্ত করতে চান, তখনঃ
- স্টেজিং এরিয়াতে যান
- যেসব ফাইল কমিট করতে চান সেগুলো স্টেজ করুন
- "amend" চেকবক্সে ক্লিক করুন
- আপনার কমিট মেসেজ সম্পাদনা করুন
- কমিট করুন

সিনারিও ৩ঃ আগের একটি কমিট এ ফিরে যাওয়া
আপনার লোকাল রিপোজিটরিতে ইতোমধ্যেই কয়েকটি কমিট রয়েছে। আপনি সিদ্ধান্ত নিলেন যে আপনি এ কমিটগুলো আর চান না, এবং আপনি পূর্বাবস্থা থেকে আপনার ফাইল "লোড" করতে চান।
- গিট হিস্টরিতে যান
- যে কমিটটির পূর্বাবস্থায় যেতে চান সেটিতে রাইট ক্লিক করুন
- "reset
branch
to here" নির্বাচন করুন

উল্লেখ্যঃ রিমোট এ পাঠানো হয়নি শুধুমাত্র এমন একটি কমিট এই আপনি রিসেট করতে পারেন।
সিনারিও ৪ঃ ইতোমধ্যেই রিমোট এ পাঠানো একটি কমিটকে রিভার্ট করা
আপনি রিমোট ব্রাঞ্চে পুশ করা কোন কমিটকে রিভার্ট করতে চান।
রিভার্ট করা মানে একটি নতুন কমিট বানানোর মাধ্যমে পরিবর্তনগুলো undo করা। আগে যদি আপনি একটি লাইন দিয়ে থাকেন, তাহলে এই রিভার্ট কমিট সেটিকে মুছে ফেলবে। আর আপনি যদি আগে লাইন মুছে থাকেন, তাহলে এই রিভার্ট কমিট আবার সেটিকে যুক্ত করবে।
রিভার্ট করতে চাইলে আপনিঃ
- গিট হিস্টরিতে যান
- যে কমিটটি রিভার্ট করতে চান সেটিতে রাইট ক্লিক করুন
- "revert commit" নির্বাচন করুন
commit the changes
যেন নির্বাচিত থাকে সেটি নিশ্চিত করুন- "revert" ক্লিক করুন


অন্যান্য সিনারিও
গিট ব্যবহার করে প্রায় সবকিছুই কীভাবে undo করা যায় তার উপরে গিটহাব এর খুব ভালো একটি আর্টিকেল রয়েছে। এরকম সমস্যায় পড়লে এটি আপনাকে অনেক সাহায্য করবে। আর্টিকেলটি এখানে পড়ুন।
পড়ার জন্য ধন্যবাদ। এ আর্টিকেলটি কি আপনাকে কোনভাবে সাহায্য করেছে? যদি করে থাকে, তাহলে আপনি এটি শেয়ার করতে পারেন। হয়তোবা এভাবে আপনি অন্য কাউকেও সাহায্য করবেন। ধন্যবাদ!
এ আর্টিকেলটি প্রথমে আমার ব্লগ এ পোস্ট করা হয়েছিলো। আপনি যদি ভালো ফ্রন্ট-এন্ড ডেভেলপার হওয়ার জন্য আরো আর্টিকেল চান, তাহলে আমার নিউজলেটার এ সাইন আপ করতে পারেন।