আপনি ধাক্কা যদি একটি সার্ভারে কমিট, এবং তারপর পুনর্লিখন স্থানীয় ভাবে (সঙ্গে কমিট git reset
, git rebase
, git filter-branch
, বা অন্য কোন ইতিহাস ম্যানিপুলেশন), এবং তারপর ধাক্কা যে পুনর্লিখিত ফিরে সার্ভারে আপ কমিট, আপনি অন্য কেউ টানা ছিল স্ক্রু আপ হবে। এখানে একটি উদাহরণ; বলুন যে আপনি A প্রতিশ্রুতিবদ্ধ করেছেন এবং এটি সার্ভারে ঠেলে দিয়েছেন।
- * - * - এ <- মাস্টার
- * - * - এ <- উত্স / মাস্টার
আপনারা যেভাবে উল্লিখিত, পুনরায় সেট করা এবং পুনরায় প্রতিশ্রুতিবদ্ধ সেভাবে এখন আপনি এটিকে পুনরায় লেখার সিদ্ধান্ত নিন। নোট করুন যে এটি একটি ঝুঁকিপূর্ণ প্রতিশ্রুতি ছেড়ে দেয়, এ, যা অবশেষে এটি আবশ্যক না হওয়ায় আবর্জনা সংগ্রহ করা হবে।
- * - * - এ
\
এ '<- মাস্টার
- * - * - এ <- উত্স / মাস্টার
যদি অন্য কেউ, ফ্রেডকে বলুন master
যে আপনি এই কাজটি করার সময় সার্ভার থেকে সরিয়ে ফেলেন , তাদের A এর একটি রেফারেন্স থাকবে, যা থেকে তারা কাজ শুরু করতে পারে:
- * - * - এ '<- মাস্টার
- * - * - এ <- উত্স / মাস্টার
- * - * - এবি <- ফ্রেড / মাস্টার
এখন আপনি যদি আপনার 'আ' কে উত্স / মাস্টারে চাপ দিতে সক্ষম হন যা একটি অ-ফাস্ট-ফরোয়ার্ড তৈরি করে, এটির ইতিহাসে এটির কোনও দরকার নেই। সুতরাং ফ্রেড যদি আবার টানতে চেষ্টা করে, তবে হঠাৎ তাকে একীভূত করতে হবে এবং এ কমিটিকে নতুন করে পরিচয় করিয়ে দেবেন:
- * - * - এ '<- মাস্টার
- * - * - এ <- উত্স / মাস্টার
- * - * - এবি \
\ * <- ফ্রেড / মাস্টার
এ '- /
ফ্রেড যদি এটি লক্ষ্য করে থাকে, তবে সে পুনরায় একটি রিবেস করতে পারে, যা কমিটিকে এ পুনরায় প্রদর্শিত হতে বাধা দেয়। তবে তাকে এটি খেয়াল করতে হবে এবং এটি করা মনে রাখতে হবে; এবং যদি আপনার কাছে একাধিক ব্যক্তি থাকে যিনি এটিকে টানেন, তবে গাছটিতে অতিরিক্ত ক কমিট হওয়া এড়াতে তাদের সবাইকে পুনঃব্যবহার করতে হবে।
সুতরাং, অন্যান্য লোকেদের কাছ থেকে নেওয়া কোনও রেপোতে ইতিহাস পরিবর্তন করা সাধারণত ভাল ধারণা নয়। তবে, আপনি যদি জানতে পারেন যে এই রেপো থেকে অন্য কেউ টানছেন না (উদাহরণস্বরূপ, এটি আপনার নিজস্ব ব্যক্তিগত রেপো, বা আপনি কেবল অন্য প্রকল্পে কাজ করছেন যার সাথে আপনি সহজেই সমন্বয় করতে পারেন) তবে আপনি জোর করেই চালিয়ে আপডেট করুন:
git push -f
বা
git push origin +master
এগুলি উভয়ই দ্রুত-অগ্রসর না হওয়া ধাক্কা দেওয়ার জন্য চেক উপেক্ষা করবে এবং সার্ভারে থাকা আপনার নতুন এ'র সংশোধনকে আপডেট করবে, এ রিভিশনটি ত্যাগ করবে যাতে শেষ পর্যন্ত তা আবর্জনা সংগ্রহ করা যায়।
এটি সম্ভব যে ফোর্স পুশগুলি receive.denyNonFastForwards
কনফিগার বিকল্পের সাহায্যে সম্পূর্ণ অক্ষম থাকে are ভাগ করা সংগ্রহস্থলগুলিতে এই বিকল্পটি ডিফল্টরূপে সক্ষম হয়। সেক্ষেত্রে, যদি আপনি সত্যই সত্যই একটি জোর চাপতে চান তবে সর্বোত্তম বিকল্পটি হ'ল শাখাটি মুছে ফেলা এবং এটি দিয়ে পুনরায় তৈরি করা git push origin :master; git push origin master:master
। যাইহোক, denyNonFastForwards
বিকল্পটি একটি কারণে সক্ষম করা হয়েছে, যা উপরে বর্ণিত হয়েছে; একটি ভাগ করা সংগ্রহস্থলের উপর, এর অর্থ হ'ল এখন যারাই এটি ব্যবহার করেন তাদের অবশ্যই এটি নতুন ইতিহাসের দিকে প্রত্যাবর্তন করা উচিত তা নিশ্চিত হওয়া উচিত।
একটি ভাগ করা ভান্ডারগুলিতে, কেবলমাত্র নতুন কমিটগুলি উপরে চাপানো ভাল যা আপনার যে কোনও সমস্যাই স্থির করে; আপনি git revert
কমিটগুলি তৈরি করতে ব্যবহার করতে পারেন যা পূর্ববর্তী কমিটগুলির পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনবে।