দ্রষ্টব্য: এই উত্তরটি SHA1 পরিবর্তন করে, সুতরাং ইতিমধ্যে ঠেলাঠেলি করা একটি শাখায় এটি ব্যবহারের বিষয়ে যত্ন নিন। আপনি যদি কেবল কোনও নামের বানান ঠিক করতে চান বা কোনও পুরানো ইমেল আপডেট করতে চান, গিট আপনাকে ইতিহাস ব্যবহার করে পুনর্লিখন না করে এটি করতে দেয় .mailmap। দেখুন আমার অন্যান্য জবাব ।
ইন্টারেক্টিভ রিবেস ব্যবহার করা
আপনি করতে পারেন
git rebase -i -p <some HEAD before all of your bad commits>
তারপরে আপনার সমস্ত খারাপ কমিটগুলি রিবেস ফাইলটিতে "সম্পাদনা" হিসাবে চিহ্নিত করুন। যদি আপনিও নিজের প্রথম প্রতিশ্রুতি পরিবর্তন করতে চান, আপনাকে ম্যানুয়ালি এটি রিবেস ফাইলের প্রথম লাইন হিসাবে যুক্ত করতে হবে (অন্যান্য লাইনের বিন্যাসটি অনুসরণ করুন)। তারপরে, যখন গিট আপনাকে প্রতিটি প্রতিশ্রুতি সংশোধন করতে বলে, তখন করুন
git commit --amend --author "New Author Name <email@address.com>"
সম্পাদনা করুন বা খোলার সম্পাদকটি বন্ধ করুন এবং তারপরে করুন
git rebase --continue
রিবেস চালিয়ে যেতে।
--no-edit
কমান্ডটি যাতে করে সংযোজন করে আপনি এখানে পুরোপুরি সম্পাদক খোলার এড়াতে পারেন:
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
একক প্রতিশ্রুতি
কিছু মন্তব্যকারী উল্লেখ করেছেন যে, আপনি যদি সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি পরিবর্তন করতে চান তবে রিবেস আদেশটি প্রয়োজনীয় নয়। শুধু কর
git commit --amend --author "New Author Name <email@address.com>"
এটি লেখককে নির্দিষ্ট করা নামটিতে পরিবর্তন করবে তবে প্রতিশ্রুতিবদ্ধটি আপনার কনফিগার করা ব্যবহারকারীর সাথে সেট করা হবে git config user.nameএবং তে git config user.email। আপনি যদি কিছু নির্দিষ্ট করে প্রতিশ্রুতিবদ্ধ সেট করতে চান তবে এটি লেখক এবং প্রতিশ্রুতিবদ্ধ উভয়কে সেট করবে:
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
মার্জ কমিটগুলিতে নোট
আমার মূল প্রতিক্রিয়াতে কিছুটা ত্রুটি ছিল। যদি বর্তমান HEADএবং আপনার মধ্যে কোনও মার্জ কমিট থাকে <some HEAD before all your bad commits>তবে git rebaseসেগুলি সমতল করে তুলবে (এবং যাইহোক, আপনি যদি গিটহাব পুলের অনুরোধগুলি ব্যবহার করেন তবে আপনার ইতিহাসে এক টন মার্জ কমিট থাকবে)। এটি প্রায়শই খুব আলাদা ইতিহাসের দিকে ডেকে আনতে পারে (যেমন সদৃশ পরিবর্তনগুলি "পুনরায় সাজানো" হতে পারে) এবং সবচেয়ে খারাপ ক্ষেত্রে, এটি git rebaseআপনাকে একত্রীকরণের কঠিন সংঘাতগুলি সমাধান করার জন্য জিজ্ঞাসা করতে পারে (যা সম্ভবত মার্জ কমিটগুলিতে ইতিমধ্যে সমাধান হয়েছিল)। সমাধানটি হ'ল -pপতাকাটি এতে ব্যবহার করা git rebaseহবে যা আপনার ইতিহাসের মার্জ কাঠামোটি সংরক্ষণ করবে। এর জন্য ম্যানপেজটি git rebaseহুঁশিয়ারি দিয়েছে যে ব্যবহার করা -pএবং -iসমস্যার দিকে নিয়ে যেতে পারে তবে এটির মধ্যেBUGS বিভাগটিতে বলা হয়েছে "সম্পাদনা করে এবং তাদের প্রতিশ্রুতি বার্তাগুলি পুনরায় রেকর্ডিংয়ের কাজ করা উচিত" "
আমি -pউপরের কমান্ড যুক্ত করেছি । যে ক্ষেত্রে আপনি সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি পরিবর্তন করছেন, এটি কোনও সমস্যা নয়।