গিট পুশের মূল প্রতিশ্রুতির ইতিহাস পুনরুদ্ধার করে একটি ঐতিহাসিক বিকাশকে উল্টানো

Git

আপনার গিট কমিট ইতিহাস পুনরুদ্ধার করা: একটি ধাপে ধাপে গাইড

আমি আমার user.name এবং user.email ভুলভাবে সেট করেছি, যা আমি একটি ব্যক্তিগত প্রকল্পে এক মাসের কঠোর প্রচেষ্টার পরে পেয়েছি। এমনকি আমি এই সংশোধন করার পরেও, আমি অনেক পরে আবিষ্কার করেছি যে ভুল লেখকের নামটি আমার আগের কমিটগুলিতে এখনও ছিল। আমি এই কমিটগুলি পরিবর্তন করে আমার অবদান গ্রাফ আপডেট করার প্রয়াসে একটি গিট রিবেস চেষ্টা করেছি।

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

আদেশ বর্ণনা
git reflog রেফারেন্স লগে রিবেস এবং রিসেট সহ সমস্ত সংগ্রহস্থল পরিবর্তনের ইতিহাস দেখায়।
git reset --hard ওয়ার্কিং ডাইরেক্টরি এবং স্টেজিং এরিয়াতে করা সমস্ত পরিবর্তন মুছে দেয় এবং বর্তমান শাখাটিকে নির্বাচিত কমিটে রিসেট করে।
git push --force স্থানীয় পরিবর্তনগুলিকে রিমোট রিপোজিটরিতে ঠেলে দিতে বাধ্য করে, পূর্ববর্তী কোনো দ্বন্দ্ব মুছে দেয়।
git filter-branch --env-filter প্রতিটি প্রতিশ্রুতিতে একটি ফিল্টার প্রয়োগ করে, গিট ইতিহাস পুনর্লিখন করে এবং লেখক এবং প্রতিশ্রুতিবদ্ধ ডেটার মতো পরিবেশের পরিবর্তনগুলি সক্ষম করে।
WRONG_EMAIL="wrong@example.com" ভুল ইমেল ঠিকানা ট্র্যাক করার জন্য একটি ভেরিয়েবল তৈরি করে যা পূর্ববর্তী কমিটের জন্য ব্যবহৃত হয়েছিল।
CORRECT_NAME="Correct Name" সংশোধিত ইতিহাসে কোন নাম পরিবর্তন করা উচিত তা নির্দেশ করার জন্য একটি পরিবর্তনশীল স্থাপন করে।
CORRECT_EMAIL="correct@example.com" আপডেট করা ইতিহাসে পুরানোটির পরিবর্তে কোন ইমেল ঠিকানাটি ব্যবহার করা উচিত তা নির্দেশ করার জন্য একটি পরিবর্তনশীল সেট করে।
export GIT_COMMITTER_NAME পুনর্লিখিত প্রতিশ্রুতির জন্য প্রদত্ত মানের প্রতিশ্রুতিকারকের নাম সেট করে।
export GIT_COMMITTER_EMAIL পুনর্লিখিত প্রতিশ্রুতির জন্য প্রদত্ত মানের প্রতিশ্রুতিকারক ইমেল সেট করে।
export GIT_AUTHOR_NAME পুনর্লিখিত কমিটের জন্য নির্বাচিত মানটিতে লেখকের নাম পরিবর্তন করে।
export GIT_AUTHOR_EMAIL পুনঃলিখিত প্রতিশ্রুতির জন্য লেখক ইমেলকে মনোনীত মান পরিবর্তন করে।
--tag-name-filter cat নিশ্চিত করে যে প্রদত্ত ফিল্টার ব্যবহার করে ট্যাগগুলি পুনরায় লেখা হয়েছে।

গিট ইতিহাসের পুনরুদ্ধার বোঝা

The scripts offered are meant to rectify and restore Git's commit history, especially in cases where an inadvertent rebase has changed commit dates. In the first script, the commit hash is found before the rebase process by utilizing . এই কমান্ডটি রিসেট এবং রিবেস সহ সমস্ত সংগ্রহস্থল পরিবর্তনের একটি ইতিহাস দেখায়। প্রাসঙ্গিক কমিট হ্যাশ সনাক্ত করার পরে, শাখাটি ব্যবহার করে সেই প্রতিশ্রুতিতে পুনরায় সেট করা হয় কমান্ড, যার ফলে পরবর্তী সমস্ত পরিবর্তনগুলি মুছে ফেলা হয়। এটি একটি গুরুত্বপূর্ণ পদক্ষেপ কারণ এটি রিপোজিটরিটিকে তার আগের অবস্থায় পুনরুদ্ধার করে ভুল রিবেস করার আগে। স্থানীয় পরিবর্তনগুলিকে ব্যবহার করে রিমোট রিপোজিটরিতে পুশ করা হয় কমান্ড, রিসেট শাখার সাথে পূর্ববর্তী ইতিহাস ওভাররাইট করে।

দ্বিতীয় স্ক্রিপ্টের উদ্দেশ্য হল কমিট তারিখ পরিবর্তন না করে কমিট লেখকের বিবরণ আপডেট করা। এর ব্যবহার সহ কমান্ড, এনভায়রনমেন্ট ভেরিয়েবল যেমন লেখক এবং কমিটরের বিবরণ সমস্ত কমিট জুড়ে পরিবর্তন করা যেতে পারে। ভুল বিবরণ সনাক্ত করতে এবং নতুন বর্ণনা করতে, সঠিক বেশী, যেমন ভেরিয়েবল , , এবং CORRECT_EMAIL সংজ্ঞায়িত করা হয়। এর পরে, স্ক্রিপ্টটি ব্যবহার করে কমিটারের বিবরণ আপডেট করে এবং ; একইভাবে, এটি ব্যবহার করে লেখকের বিবরণ আপডেট করে এবং export GIT_AUTHOR_EMAIL. বিকল্প গ্যারান্টি দেয় যে প্রদত্ত ফিল্টারগুলি ব্যবহার করে ট্যাগগুলি পুনরায় লেখা হয়েছে। এই স্ক্রিপ্টটি মূল কমিট তারিখগুলিকে প্রভাবিত না করেই সঠিক লেখকের তথ্য সহ প্রতিশ্রুতি ইতিহাস পুনর্লিখন করতে ব্যবহার করা যেতে পারে।

Git এর মূল প্রতিশ্রুতির ইতিহাস ফিরিয়ে আনা

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

# Step 1: Identify the commit hash before the rebase
git reflog
# Look for the commit hash before the rebase operation
# Step 2: Reset the branch to the commit before the rebase
git reset --hard <commit_hash>
# Step 3: Verify the reset
git log
# Ensure the commit history is back to its original state
# Step 4: Force push the reset history to the remote repository
git push --force

তারিখ একই রাখার সময় লেখকের বিবরণ পুনর্লিখন করা

গিট ফিল্টার-শাখা ব্যবহার করা

# Step 1: Rewrite author information without altering commit dates
git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
CORRECT_NAME="Correct Name"
CORRECT_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi'
--tag-name-filter cat -- --branches --tags

ডেটা হারানো ছাড়া গিট ব্যবহার করে ইতিহাস পুনরুদ্ধার করা

The use of

একটি অতিরিক্ত সহায়ক কমান্ড। এটি শাখাগুলির টিপস এবং অন্যান্য সংগ্রহস্থলের রেফারেন্সগুলিতে করা সমস্ত পরিবর্তনগুলির একটি ইতিহাস প্রদর্শন করে, এমনকি সেগুলিও যা প্রায়শই দেখতে থেকে লুকানো থাকে। . এটি আপনাকে কমিট হ্যাশগুলি সনাক্ত করতে দেয় যা প্রতিকূল রিসেট বা রিবেসের সময় ওভাররাইট বা হারিয়ে যেতে পারে। এর সংমিশ্রণ ব্যবহার করে এবং git reset --hard, you can revert modifications by restoring your branch to a former state. Furthermore, it's crucial to occasionally take snapshots of the status of your repository using . ট্যাগগুলি কাজে আসে কারণ তারা আপনাকে বিশেষ ঐতিহাসিক মুহূর্তগুলি টীকা করতে দেয় যা গুরুতর সমস্যার ক্ষেত্রে পূর্বাবস্থায় ফেরানো যেতে পারে।

  1. উদ্দেশ্য কি ?
  2. এটি বর্তমান শাখায় পূর্ববর্তী প্রতিশ্রুতি দ্বারা করা পরিবর্তনগুলি প্রয়োগ করে ইতিহাসের ম্যানুয়াল পুনর্গঠনে সহায়তা করে।
  3. What role does অতীত সংরক্ষণে খেলা?
  4. এটি শাখার টিপস এবং রেফারেন্সগুলিতে করা সমস্ত পরিবর্তনের ইতিহাস প্রদর্শন করে হারিয়ে যাওয়া প্রতিশ্রুতি পুনরুদ্ধার করতে সহায়তা করে।
  5. কি করে মানে?
  6. এটি ওয়ার্কিং ডাইরেক্টরি এবং স্টেজিং এরিয়াতে করা সমস্ত পরিবর্তন মুছে দেয় এবং বর্তমান শাখাটিকে একটি নির্দিষ্ট প্রতিশ্রুতিতে পুনরায় সেট করে।
  7. গিটে ট্যাগ ব্যবহার কি?
  8. ট্যাগগুলি সংগ্রহস্থলের অবস্থার স্ন্যাপশট নেয়, যেটি গুরুতর সমস্যাগুলির বিকাশের ক্ষেত্রে পুনরুদ্ধার করা যেতে পারে।
  9. : কেন ব্যবহার করবেন?
  10. অতীতে ফিল্টার প্রয়োগ করতে, ইতিহাস পুনর্লিখনের জন্য সমস্ত কমিট জুড়ে লেখক এবং প্রতিশ্রুতির বিবরণ পরিবর্তন করে।
  11. কি আলাদা করে ক একটি সাধারণ ধাক্কা থেকে?
  12. দ্বন্দ্ব নির্বিশেষে, এটি স্থানীয় পরিবর্তনগুলিকে দূরবর্তী সংগ্রহস্থল প্রতিস্থাপন করতে বাধ্য করে।
  13. কখন ব্যবহার করা ঠিক হবে ?
  14. যখন আপনাকে একটি নির্দিষ্ট প্রতিশ্রুতিতে শাখাটিকে পুনরায় সেট করতে হবে এবং কোনো অনিয়মিত পরিবর্তনগুলি অপসারণ করতে হবে, তখন এটি আপনার নিয়োগ করা পদ্ধতি হওয়া উচিত।
  15. ব্যবহার করার সময় কি নিরাপত্তা ব্যবস্থা অনুসরণ করা প্রয়োজন ?
  16. কারণ এই কমান্ডটি ইতিহাস পুনঃলিখন করে এবং সঠিকভাবে ব্যবহার না করলে ডেটা ক্ষতি হতে পারে, নিশ্চিত করুন যে আপনি সংগ্রহস্থলের ব্যাকআপ নিয়েছেন।
  17. How can a faulty rebase be undone with the aid of ?
  18. প্রতিটি রেফারেন্স পরিবর্তন প্রদর্শন করে, আপনি রিবেসের আগে থেকে কমিট হ্যাশ সনাক্ত করতে পারেন এবং শাখাটিকে যথাযথভাবে সামঞ্জস্য করতে পারেন।

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