"Your local changes to the following files will be overwritten by merge" এরর মেসেজ Git ভার্সন কন্ট্রোল মেকানিজমে আসে। এই এরর আসে যদি আপনি একটি ফাইল মডিফাই করেন যেটি রিমোট রিপোজিটরিতেও মডিফাইড আছে।
এই এরর মেসেজ এড়া যায় যদি এমন কোনো আনকমিটেড ফাইল না থাকে যেটি রিমোট রিপোজিটরিতেও মডিফাইড আছে। এই মেসেজ ফেস করলে টিম মেম্বারদের সাথে কনসাল্ট করা ভালো। আপনি লোকাল চেঞ্জ মার্জ করতে চান কি রিপোজিটরির ভার্সন রাখতে চান—সবার মতামত নেওয়া সেরা।
রিপোজিটরি কী? Git-এ push এবং pull কী?
রিপোজিটরি হলো কোডের একটি স্টোরেজ যা টিম মেম্বাররা GitHub ভার্সন কন্ট্রোল মেকানিজমে 통해 নিরंतर মডিফাই ও প্রাপ্ত করে। 'Pull' মানে আপনি রিপোজিটরির লেটেস্ট ভার্সন আপনার লোকাল স্টোরেজ/IDE (Integrated Development Environment) যেমন PyCharm-এ টানে আশুন।
Pull করার পর কোডে পরিবর্তন আনেন বা ফিচার যোগ করেন। হয়ে গেলে 'Push' করুন যাতে চেঞ্জস সেভ হয় এবং অ্যাডিশন হয়। কোড অন্যদেরও অ্যাক্সেসIBLE হয়।
GitHub ভার্সন কন্ট্রোলে নতুন হলে বেসিকগুলো পড়ুন। এই আর্টিকেলে আপনার বেসিক নলেজ আছে ধরে নেওয়া হয়েছে।
'Your local changes to the following files will be overwritten by merge' ফিক্স করার পদ্ধতি
এই এরর মেসেজের রেজোলিউশন ডিপেন্ড করে আপনি কী করতে চান। আপনি লোকাল চেঞ্জ ডিসকার্ড করে রিপোজিটরির ওনেটা পুল করতে পারেন অথবা লোকাল চেঞ্জ স্ট্যাশে সেভ করে রিপোজিটরির ভার্সন পুল করতে পারেন। আপনার পছন্দের ওপর।
টিম মেম্বারদের সাথে কনসাল্ট করুন এবং সেইম পেজ-এ থাকুন আগে যাওয়ার আগে। রং কমিট বা পুশ করলে পুরো টিমকে প্রভাবিত করতে পারে।
মেথড ১: ফোর্স পুল করে লোকাল চেঞ্জ ওভাররাইট করা
আপনি লোকাল চেঞ্জের বিষয়ে চিন্তা না করলে এবং রিপোজিটরির কোড চাইলে ফোর্স পুল করুন। এটি আপনার কম্পিউটারের সকল লোকাল চেঞ্জ ডেস্ট্রয় করবে এবং রিপোজিটরির ভার্সনের ডুপ্লিকেট কপি আসবে।
আপনার IDE-এ নিচের কমান্ড এক্সিকিউট করুন:
git reset --hard git pull
এটি ইনস্ট্যান্টলি আপনার সকল লোকাল চেঞ্জ ডেস্ট্রয় করবে—সতর্ক থাকুন আপনার লোকাল চেঞ্জ দরকার নেই নিশ্চিত হয়ে।
মেথড ২: দুটি চেঞ্জ রেখে (লোকাল এবং রিপো থেকে)
দুটি চেঞ্জ রাখতে চাইলে (লোকাল চেঞ্জ এবং রিপোজিটরিতে থাকা চেঞ্জ), আপনার চেঞ্জ অ্যাড ও কমিট করুন। পুল করলে মার্জ কনফ্লিক্ট আসবে। IDE-র টুলস (Difftool, mergetool) ব্যবহার করে দুটি কোড কম্পেয়ার করে কোন চেঞ্জ রাখবেন কোনটি রিমুভ করবেন সেটা ডিসাইড করুন। কোনো চেঞ্জ লস হবে না যতক্ষণ আপনি ম্যানুয়ালি রিমুভ করবেন না।
git add $the_file_under_error git commit git pull
মার্জ কনফ্লিক্ট আসলে কনফ্লিক্ট রেজোল্ভিং টুলস পপ করুন এবং লাইন বাই লাইন চেক করুন।
মেথড ৩: দুটি চেঞ্জ রাখুন কিন্তু কমিট না করুন
এই সিচুয়েশন 시간-सময়ে হয় যেখানে ডেভেলপাররা কমিট করতে রেডি নয় কারণ পার্টিয়ালি ব্রোকেন কোড ডিবাগ করছেন। এখানে চেঞ্জস সফলি স্ট্যাশ করুন, রিপোজিটরির ভার্সন পুল করুন, তারপর আপনার কোড আনস্ট্যাশ করুন।
git stash save --keep-index
অথবা
git stash git pull git stash pop
স্ট্যাশ পপ করার পর কিছু কনফ্লিক্ট থাকলে সেটা সাধারণভাবে রেজলভ করুন। git stash applyও ব্যবহার করতে পারেন pop-এর বদলে যদি কনফ্লিক্টের কারণে স্ট্যাশড কোড হারাতে চান না।
মার্জ ভালো অপশন না লাগলে রিবেস কনসিডার করুন। রিবেসিং হলো কমিট সিকোয়েন্সকে নิว বেস কমিটে মুভ বা কম্বাইন করা। রিবেসের কেসে কোড চেঞ্জ করুন:
git stash git pull --rebase origin master git stash pop
মেথড ৪: কোডের 'স্পেসিফিক' পার্টে পরিবর্তন করা
আপনি কোডের নির্দিষ্ট অংশে পরিবর্তন করতে চান এবং সবকিছু রিপ্লেস করতে চান না, তবে যা ওভাররাইট করতে চান না সেগুলো কমিট করুন এবং মেথড ৩ ফলো করুন। রিপোজিটরির ভার্সন থেকে যা ওভাররাইট করতে চান সেসব জন্য:
git checkout path/to/file/to/revertঅথবা
git checkout HEAD^ path/to/file/to/revertও নিশ্চিত করুন ফাইল স্টেজড নয়:
git reset HEAD path/to/file/to/revertতারপর পুল কমান্ড:
git pullএটি রিপোজিটরির ভার্সন ফেচ করার চেষ্টা করবে।