গিটে একাধিক কমিট কিভাবে প্রত্যাবর্তন করা যায়

গিটে একাধিক কমিট কিভাবে প্রত্যাবর্তন করা যায়
Git Command Line

গিট কমিট রিভার্সন বোঝা

একটি গিট রিপোজিটরিতে একাধিক কমিট প্রত্যাবর্তন করা একটি সাধারণ কাজ যখন প্রকল্পের ইতিহাস পরিবর্তন না করে পূর্ববর্তী পরিবর্তনগুলি পূর্বাবস্থায় ফেরানো প্রয়োজন। আপনার অতীতের কাজের অখণ্ডতা রক্ষা করার সময় পরিবর্তনের পিছনে ফিরে যাওয়ার এটি একটি নিরাপদ পদ্ধতি। এই পদ্ধতিটি বিশেষভাবে উপযোগী যখন আপনি আপনার পরিবর্তনগুলি অন্যদের সাথে শেয়ার করেছেন এবং রিবেস আর একটি কার্যকর বিকল্প নয়।

চ্যালেঞ্জ দেখা দেয় যখন আপনাকে কমিটের একটি সিরিজ প্রত্যাবর্তন করতে হবে—যেমন কমিট D-এ হেড থেকে A-তে যাওয়া, কার্যকরভাবে B, C, এবং D-কে উপেক্ষা করা। এই কমিটগুলিকে প্রত্যাবর্তনের জন্য সঠিক পদ্ধতি এবং আদেশ বোঝা একটি বজায় রাখার জন্য গুরুত্বপূর্ণ। পরিষ্কার এবং কার্যকরী সংগ্রহস্থল।

আদেশ বর্ণনা
git reset --hard A বর্তমান শাখার হেডকে নির্দিষ্ট প্রতিশ্রুতিতে (এ ক্ষেত্রে A) রিসেট করে, সেই প্রতিশ্রুতির পর থেকে কার্যকরী ডিরেক্টরি এবং সূচীতে থাকা সমস্ত পরিবর্তন বাতিল করে।
git push --force রিমোট রিপোজিটরিতে ধাক্কা দিতে বাধ্য করে, বর্তমান শাখার অবস্থার সাথে রিমোটে পরিবর্তনগুলি ওভাররাইট করে। পরিবর্তনগুলি পূর্বে পুশ করা হলে এটি একটি হার্ড রিসেটের পরে প্রয়োজনীয়।
git revert <commit> --no-commit প্রত্যাবর্তন না করে নির্দিষ্ট প্রতিশ্রুতি দ্বারা প্রবর্তিত পরিবর্তনগুলিকে ফিরিয়ে দেয়। এটি একাধিক প্রত্যাবর্তনকে একটি একক প্রতিশ্রুতিতে গোষ্ঠীভুক্ত করার অনুমতি দেয়।
git commit -m "Message" প্রদত্ত বার্তার সাথে রিপোজিটরিতে বর্তমান স্টেজিং এরিয়া বিষয়বস্তুকে কমিট করে, প্রত্যাবর্তন বা রিসেট প্রক্রিয়া চূড়ান্ত করে।

গিট কমান্ড স্ক্রিপ্টের ব্যাখ্যা

প্রদত্ত স্ক্রিপ্টগুলি একটি গিট রিপোজিটরিতে পরিবর্তনগুলি পরিচালনা এবং প্রত্যাবর্তনের জন্য ডিজাইন করা হয়েছে, হয় শাখাটিকে পূর্ববর্তী অবস্থায় পুনরায় সেট করে বা নির্বাচনীভাবে প্রতিশ্রুতি প্রত্যাবর্তন করে। দ্য git reset --hard A কমান্ডটি অত্যন্ত গুরুত্বপূর্ণ কারণ এটি শাখার প্রধানকে একটি পূর্ববর্তী প্রতিশ্রুতিতে পুনরায় সংজ্ঞায়িত করে, 'A' হিসাবে চিহ্নিত। এই ক্রিয়াটি কমিট A এর পরে শাখায় করা সমস্ত পরিবর্তন বাতিল করে, কার্যকরভাবে রিপোজিটরি স্টেটকে কমিট A-এর সাথে অভিন্ন করে তোলে। এই কমান্ডটি শক্তিশালী কিন্তু সতর্কতার সাথে ব্যবহার করা উচিত কারণ এটি স্থায়ীভাবে পরিবর্তনগুলিকে মুছে দেয়, যখন আপনার পরিষ্কার প্রত্যাবর্তনের প্রয়োজন হয় তখন এটি উপযুক্ত করে তোলে। একটি পরিচিত ভাল রাষ্ট্রের কাছে।

দ্য git revert কমান্ড, সঙ্গে মিলিত --no-commit বিকল্প, ব্যবহার করা হয় যখন আপনি কমিট B, C, এবং D দ্বারা প্রবর্তিত নির্দিষ্ট পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনতে পছন্দ করেন, কিন্তু কী পূর্বাবস্থায় ফেরানো হয়েছিল তার একটি রেকর্ড রাখতে চান। এই পদ্ধতিটি ইতিহাস বজায় রাখে, যা ভাগ করা ভান্ডারের জন্য উপকারী যেখানে পরিবর্তনের বিবর্তন বোঝা গুরুত্বপূর্ণ। প্রয়োজনীয় কমিট প্রত্যাবর্তনের পরে, একটি একক git commit সমস্ত প্রত্যাবর্তনকে একটি স্ন্যাপশটে গোষ্ঠীবদ্ধ করতে ব্যবহৃত হয়, যা প্রকল্পের ইতিহাসকে সরল করে এবং প্রত্যাবর্তনের প্রেক্ষাপট বোঝা সহজ করে তোলে। এর ব্যবহার git push --force শাখার ইতিহাসে এই ধরনের কঠোর পরিবর্তনের পরে রিমোট রিপোজিটরি আপডেট করা প্রয়োজন।

গিট শাখাকে একটি নির্দিষ্ট প্রতিশ্রুতিতে পুনরায় সেট করা হচ্ছে

গিট কমান্ড লাইন ব্যবহার করে

git checkout your-branch-name
git reset --hard A
git push origin your-branch-name --force

গিটে একাধিক পরিবর্তন ফিরিয়ে আনা

গিট অপারেশনের জন্য ব্যাশের সাথে স্ক্রিপ্টিং

git checkout your-branch-name
git revert D --no-commit
git revert C --no-commit
git revert B --no-commit
git commit -m "Reverted commits B, C, and D"
git push origin your-branch-name

গিট ইতিহাস পরিচালনার জন্য উন্নত কৌশল

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

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

প্রয়োজনীয় গিট প্রশ্নের উত্তর

  1. কি করে git reset --hard আদেশ করবেন?
  2. এটি বর্তমান শাখার প্রধানকে নির্দিষ্ট প্রতিশ্রুতিতে রিসেট করে, স্টেজিং এরিয়াতে সমস্ত পরিবর্তন বাতিল করে এবং সেই প্রতিশ্রুতির পর থেকে কার্যরত ডিরেক্টরি।
  3. আমি কি একটি মার্জ কমিট প্রত্যাবর্তন করতে পারি?
  4. হ্যাঁ, আপনি বিশেষভাবে ব্যবহার করে একটি মার্জ কমিট প্রত্যাবর্তন করতে পারেন git revert -m 1 <commit>, যেখানে "1" বজায় রাখার জন্য একত্রীকরণের মূল প্রতিশ্রুতি নির্দিষ্ট করে৷
  5. ভূমিকা কি git reflog?
  6. রিফ্লগ ব্যবহার করা হয় শাখার টিপস এবং রিপোজিটরির অন্যান্য রেফারেন্সের পরিবর্তনগুলি ট্র্যাক করতে, হারানো প্রতিশ্রুতি পুনরুদ্ধার করতে বা রেপোতে করা পরিবর্তনগুলি অন্বেষণ করতে সহায়তা করে।
  7. কিভাবে করে git rebase মার্জ থেকে ভিন্ন?
  8. রিবেস একটি শাখার ভিত্তিকে একটি নতুন প্রতিশ্রুতিতে পরিবর্তন করে প্রকল্পের ইতিহাস পুনর্লিখন করে, যা একটি মার্জের তুলনায় ইতিহাসকে পরিষ্কার করে তুলতে পারে।
  9. একটি শাখা রিসেট করার পরে জোর করে চাপ দেওয়া কি নিরাপদ?
  10. পরিবর্তনগুলি ইতিমধ্যেই পুশ করা থাকলে রিসেট করার পরে ফোর্স-পুশিং প্রয়োজনীয়, তবে এটি দূরবর্তী পরিবর্তনগুলিকে ওভাররাইট করতে পারে এবং সতর্কতার সাথে ব্যবহার করা উচিত।

গিট কমিট রিভার্সন সম্পর্কে চূড়ান্ত চিন্তা

একাধিক কমিট প্রত্যাবর্তনের প্রয়োজন হলে একটি গিট রিপোজিটরি সফলভাবে পরিচালনা করার জন্য উপলব্ধ প্রভাব এবং কৌশলগুলি বোঝা জড়িত। একটি নির্দিষ্ট প্রতিশ্রুতিতে হার্ড রিসেট বা প্রতিটি কমিটের জন্য প্রত্যাবর্তন কমান্ডের সাবধানে ব্যবহার করা হোক না কেন, লক্ষ্য হল সংগ্রহস্থলটি পরিষ্কার থাকে এবং ইতিহাস বোধগম্য হয় তা নিশ্চিত করা। সহযোগিতামূলক প্রকল্পগুলির জন্য, এই পরিবর্তনগুলিকে যোগাযোগ করা এবং বিঘ্ন রোধ করার জন্য দূরবর্তী সংগ্রহস্থলকে সাবধানে পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ। শেষ পর্যন্ত, এই কমান্ডগুলিকে আয়ত্ত করা ডেভেলপারদের তাদের প্রকল্পের টাইমলাইনে কার্যকরভাবে নিয়ন্ত্রণ বজায় রাখতে দেয়।