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

Git Revert Commit: ধাপে ধাপে গাইড

git revert কমান্ড একটি কমিট আনডু করবে যাতে আপনি একটি রিপোজিটরিকে পূর্বের কমিটে রিটার্ন করতে পারেন। কমিটটি ডিলিট করার বদলে, revert একটি নতুন কমিট তৈরি করবে যা একটি পাবলিশড কমিটের পরিবর্তনগুলো রিভার্স করবে। এটি ইনিশিয়াল কমিটকে প্রজেক্টের ইতিহাসের অংশ হিসেবে সংরক্ষণ করে।


যখন আপনি একটি Git রিপোজিটরির সাথে কাজ করছেন, আপনি অকস্মাত একটি কমিট তৈরি করতে পারেন কোডসহ যা আপনার Git রিপোজিটরিতে সংরক্ষণ করার জন্য প্রস্তুত নয়।

সেটাই যেখানে git revert কমান্ড কাজে আসে। git revert কমান্ড আপনাকে একটি কমিট undo করতে দেয় যাতে আপনি একটি রিপোজিটরিকে পূর্বের কমিটে রিটার্ন করতে পারেন।

এই টিউটোরিয়াল উদাহরণসহ রিভার্টিং কোড এবং কীভাবে git revert কমান্ড ব্যবহার করে আপনার কোড রিভার্ট করবেন তা আলোচনা করবে। এই টিউটোরিয়াল পড়ার শেষে, আপনি git revert commit কমান্ড ব্যবহার করে কোড রিভার্ট করার এক্সপার্ট হবেন।

আপনার কোড রিভার্ট করা

কখনও কখনও, যখন আপনি একটি Git রিপোজিটরির সাথে কাজ করছেন, আপনি লক্ষ্য করতে পারেন যে আপনি আপনার কমিটে একটি ভুল করেছেন।

উদাহরণস্বরূপ, ধরা যাক আপনি একটি নতুন ফিচারে কাজ শেষ করেছি, এবং আপনি বুঝতে পেরেছেন যে একটি বাগ আছে যেটি ফিক্স করতে হবে। আপনি বাগ ফিক্সটি কমিট করলে, আপনি লক্ষ্য করেন যে আপনি আপনার কাজ করছেন নতুন ফিচারের ওয়ার্কিং ডিরেক্টরিও কমিট করেছেন।

এর মানে আপনার কমিটে বাগ ফিক্স এবং একটি নতুন ফিচার দুটোই আছে, যা প্রজেক্টে অন্য কলাবরেটরদের বুঝতে গুল করতে পারে। দুটোই পরিবর্তন একসাথে কমিট করার বদলে, আপনি চেয়েছিলেন সেগুলো দুটি আলাদা কমিটে ইনক্লুড করা।

এই সিন্যারিওতে, আপনি আপনার রিপোজিটরিকে সেই স্টেটে রিভার্ট করতে চাইতে পারেন যেটি আপনি কমিট পুশ করার আগে ছিল। এটি আপনাকে আরেকটা চান্স দেবে আপনার কমিটগুলো গিট-এ পুশ করতে লাস্ট কমিট রিভার্ট করে।

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

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

Git Revert কমান্ড

git revert কমান্ড আপনাকে একটি কমিট undo করতে দেয়। যাইহোক, একটি কমিট একটি প্রজেক্ট থেকে ডিলিট করার বদলে, git revert কমান্ড লাস্ট دوটি কমিটের মধ্যে পরিবর্তনগুলো খুঁজে বের করে এবং একটি নতুন কমিট তৈরি করে যা সেই পরিবর্তনগুলো রিভার্স করে।

git revert কমান্ড উপকারী কারণ এটি আপনাকে একটি রিপোজিটরির প্রজেক্ট হিস্টরি সংরক্ষণ করতে দেয়। একটি কমিট সম্পূর্ণরূপে ডিলিট করার বদলে, এটি আপনাকে একটি রিপোজিটরিকে অন্য একটি কমিটে রিভার্ট করতে দেয়, যাতে আপনি এখনো আপনার রিপোজিটরিতে পুশ করা প্রতিটি কমিটের একটি সঠিক রেকর্ড রাখতে পারেন।

আপনাকে git revert কমান্ড ব্যবহার করা উচিত সেই পরিস্থিতিতে যেখানে আপনি আপনার লাস্ট কমিট রিভার্স করতে চান। আপনার লাস্ট কমিটে আপনার দরকারি পরিবর্তনগুলো ম্যানুয়ালি করার বদলে, আপনি আপনার কমিট রিভার্ট করতে পারেন এবং একটি নতুন কমিট পুশ করতে পারেন কোডবেসে।

git revert কমান্ডের সিনট্যাক্স নিচের মতো:

git revert

চলুন একটি উদাহরণ দিয়ে ইলাস্ট্রেট করি কীভাবে এই কমান্ড কাজ করে।

Git Revert উদাহরণ

আমাদের লোকাল মেশিনে একটি উদাহরণ রিপোজিটরি আছে এক ফাইল সহ: README.md। আমরা ফাইলে একটি পরিবর্তন করেছি যেটি আমরা একটি কমিটে পুশ করতে চাই। আমরা এটি এই কোড দিয়ে করতে পারি:

git commit -m "docs: Update README.md with author info"

এই কমান্ড, এক্সিকিউট হলে, একটি কমিট তৈরি করে মেসেজ docs: Update README.md with author info সহ। আমরা আমাদের README.md ফাইলে আরেকটি পরিবর্তন করেছি, যা আমরা আমাদের রিপোজিটরিতে কমিট করি এই কমান্ড ব্যবহার করে:

git commit -m "docs: Update order of authors by contributions"

এই কমান্ড আমাদের রিপোজিটরিতে আরেকটি কমিট তৈরি করে। আমরা যদি git log –pretty=oneline কমান্ড ব্যবহার করি (যে আমাদের কমিটের একটি শর্ট লিস্ট দেখায়), আমরা দেখতে পাই আমাদের রিপো হিস্ট্রিতে দুটি কমিট আছে:

6f52d877873e7d3b52c929647384dfdf2488da22 (HEAD -> master) docs: Update order of authors by contributions 57d763663e619088159bb7629243456f88feab79 docs: Update README.md with author info

এখন, ধরা যাক আমরা সিদ্ধান্ত নিই যে আমরা আমাদের লাস্ট কমিট রিভার্ট করতে চাই। আমরা বুঝতে পারি যে আমাদের README.md ফাইলে লেখকদের অর্ডার ইনকরেক্ট ছিল, এবং তাই আমাদের রিপোজিটরিকে সেই স্টেটে ফেরত আনতে হবে যেটি ছিল আমাদের লাস্ট কমিট পুশ করার আগে।

আমরা এটি এই কমান্ড দিয়ে করতে পারি:

git revert HEAD

যখন আমরা এই কমান্ড রান করি, আমাদের ডিফল্ট টেক্স্ট এডিটর খুলবে এবং আমাদের থেকে আমাদের কমিটের জন্য একটি মেসেজ তৈরি করতে বলবে। এই কমান্ডে, HEAD রেফার করে লেটেস্ট কমিট। আমাদের উদাহরণে, আমরা মেসেজ টাইপ করি revert author order commit। তারপর, কমান্ড নিচের রিটার্ন করে:

[master b66c29a] revert author order commit "docs: Update order of authors by contributions" 1 file changed, 1 deletion(-)

এখন, যখন আমরা git log –pretty=oneline কমান্ড রান করি, আমরা দেখতে পাই একটি নতুন কমিট তৈরি হয়েছে:

b66c29a8c4c226fa9ae8cd8f9e086c0a73e6ecfe (HEAD -> master) revert author order commit "docs: Update order of authors by contributions" 6f52d877873e7d3b52c929647384dfdf2488da22 docs: Update order of authors by contributions 57d763663e619088159bb7629243456f88feab79 docs: Update README.md with author info

আমাদের কমিট হিস্ট্রি এখন তিনটি কমিট লিস্ট করে। আমাদের লাস্ট কমিট ডিলিট করার বদলে, git revert কমান্ড একটি নতুন কমিট তৈরি করেছে যা পূর্বের কমিটের পরিবর্তনগুলো আনডু করেছে। এর মানে আমাদের এখনো সকল কমিটের একটি কমপ্লিট হিস্টরি আছে যেগুলো আমরা আমাদের রিপোজিটরিতে পুশ করেছি।

git revert কমান্ড একটি কমিট রেফারেন্স দরকার এক্সিকিউট করার জন্য। এই কেসে, আমরা HEAD স্পেসিফাই করেছি, যা আমাদের রিপোজিটরিকে লাস্ট কমিটে রিভার্ট করে।

আমরা যদি অন্য একটি কমিটে রিভার্ট করতে চাই, আমরা সেই কমিটের হ্যাশ ভ্যালু স্পেসিফাই করতে পারি। তাই, আমাদের কমান্ডে HEAD স্টেট করার বদলে, আমরা git log কমান্ডের রিটার্ন করা হ্যাশ ব্যবহার করতে পারি আমাদের পছন্দের একটি কমিটে রিভার্ট করতে। সেটি করার কমান্ডের একটি উদাহরণ:

git revert 57d763663e619088159bb7629243456f88feab79

এই কমান্ড আমাদের রিপোজিটরিকে SHA hash 57d763663e619088159bb7629243456f88feab79 সহ কমিটে রিভার্ট করবে। এই রিপোজিটরিতে, সেই হ্যাশ কোরেসপন্ড করে আমাদের রিপোজিটরিতে করা প্রথম কমিটের সাথে।

Git Revert vs. Reset

revert এবং reset কমান্ড দুটোই একটি Git রিপোজিটরিতে পূর্বের কমিট থেকে পরিবর্তন আনডু করতে ব্যবহৃত হয়। যাইহোক, আপনাকে অবগত হওয়া উচিত যে এই কমান্ডগুলো কিছুটা ডিফারেন্ট behavior সহ।

git revert কমান্ড লাইন অপারেশনটি ব্যবহার করা হয় পূর্বের কমিট আনডু করতে। আপনি git revert রান করলে, দুটি কমিটের মধ্যে পরিবর্তনগুলো আনডু হয়। তারপর, একটি নতুন কমিট তৈরি হয় যেটি আপনার রিপোজিটরিতে পরিবর্তনগুলো আনডু হওয়ার পরের কোড ধারণ করে।

git reset কমান্ড, অন্যদিকে, একটি রিপোজিটরিকে এর পূর্বের স্টেটে রিভার্ট করে একটি সার্টেন রেঞ্জের সব কমিট রিমুভ করে। তাই, আপনি যদি git reset রান করেন এবং একটি পূর্বের কমিট রেফারেন্স করেন, কারেন্ট স্টেট অফ দ্য রিপোজিটরি এবং সেই কমিটের মাঝপথের সকল কমিট ডিলিট হয়ে যাবে।

একটি কমিট রিভার্ট করা প্রায়শই পছন্দনীয় রিসেট করার চেয়ে। মূল কারণ হলো git revert আপনার প্রজেক্টের ইতিহাস পরিবর্তন করে না। এটি আপনাকে, ডেভেলপারকে, একটি প্রজেক্টে করা সকল পরিবর্তনের একটি সঠিক রেকর্ড মেইনটেইন করতে দেয়।

অতিরিক্তভাবে, git revert কমান্ড আপনাকে একটি ইনডিভিজুয়াল কমিটে রিভার্ট করতে দেয় আপনার রিপোজিটরির ইতিহাসের একটি নির্দিষ্ট পয়েন্টে। git reset কমান্ড, অন্যদিকে, শুধু কারেন্ট কমিট থেকে ব্যাকওয়ার্ডস কাজ করে।

এর মানে হলো, আপনি যদি আপনার রিপোজিটরির ইতিহাসে অনেক দূরে একটি কমিট আনডু করতে চান, আপনাকে সেই পয়েন্টের আগের সকল কমিট রিমুভ করতে হবে, তারপর আপনার পরিবর্তন কমিট করতে হবে। এটি আপনার রিপোজিটরির ইতিহাসের একটি সঠিক রেকর্ড সংরক্ষণ করা কঠিন করে তোলে, যা সোর্স কন্ট্রোল টুলস όπως Git কার্যকরভাবে ব্যবহার করার একটি অতিশয় গুরুত্বপূর্ণ অংশ।

উপসংহার

git revert কমান্ড আপনাকে আপনার কোড রিপোজিটরিতে করা পরিবর্তনগুলো আনডু করতে দেয় যেহেতু একটি স্পেসিফিক কমিট। একটি কমিট ডিলিট করার বদলে, git revert কমান্ড কারেন্ট কমিট এবং একটি পূর্বের কমিটের মধ্যে পরিবর্তনগুলো আইডেন্টিফাই করে এবং একটি নতুন কমিট তৈরি করে সেই পরিবর্তনগুলো রিভার্ট করতে।

এই টিউটোরিয়াল আলোচনা করেছি কীভাবে git revert কমান্ড ব্যবহার করে Git-এ একটি কমিট রিভার্ট করতে হয়। এখন আপনি git revert commit কমান্ড প্রফেশনাল ডেভেলপারের মতো ব্যবহার করার জন্য প্রস্তুত!


  1. জাভা কম্পাইলার: ধাপে ধাপে গাইড

  2. jQuery find(): ধাপে ধাপে গাইড

  3. Git Cherry Pick: ধাপে ধাপে গাইড

  4. Git Add: ধাপে ধাপে গাইড