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

রিপোজিটরিতে শুরু করুন এবং আসল ত্রুটিটি চিহ্নিত করুন

টার্মিনাল খুলুন, প্রজেক্ট ফোল্ডারে প্রবেশ করুন, এবং বার্তাটি পুনরায় দেখতে পাওয়ার প্রয়োজন হলেই কেবল আবার পুল চালান। বর্তমান macOS-এ টার্মিনাল ডিফল্ট হিসেবে zsh ব্যবহার করে, এবং নিচের উদ্ধৃত কমান্ডগুলো zsh ও bash উভয়েই কাজ করে। অ্যাপলের টার্মিনাল গাইড

cd "/path/to/your/project"
git status --short --branch
git pull

উদ্ধৃত পাথটিকে আপনার প্রজেক্টের আসল ফোল্ডার দিয়ে প্রতিস্থাপন করুন। সম্পূর্ণ পুলের ত্রুটিটি পড়ুন। "Your local changes … would be overwritten" বার্তাটি ফাইল স্তরের কোনো বাধার দিকে ইঙ্গিত করে। "Divergent branches" বা "Not possible to fast-forward"-এর অর্থ হলো স্থানীয় এবং আপস্ট্রিম কমিট ইতিহাসের একটি সমন্বয়মূলক সিদ্ধান্ত নেওয়া প্রয়োজন। গ্রাফিক্যাল ক্লায়েন্টে এই সমস্যাগুলো দেখতে একই রকম মনে হতে পারে, তবে এগুলোর জন্য ভিন্ন ভিন্ন পদক্ষেপ নেওয়া প্রয়োজন।

সংক্ষিপ্ত স্ট্যাটাস ভিউতে লুকানো ফাইলগুলো খুঁজুন

একটি সংক্ষিপ্ত স্ট্যাটাস প্রদর্শন গুরুত্বপূর্ণ বিবরণগুলো বাদ দিতে পারে। একটি সম্পূর্ণ রিড-অনলি পরিদর্শন চালান:

git status --untracked-files=all --ignored=matching --ignore-submodules=none
git diff --
git diff --cached --

git status সাধারণত আনট্র্যাকড ফাইলগুলোর রিপোর্ট দেয়, কিন্তু স্থানীয় কোনো সেটিংস সেগুলো লুকিয়ে রাখতে পারে; --untracked-files=all আনট্র্যাকড ফোল্ডারের ভেতরের প্রতিটি ফাইল আলাদাভাবে তালিকাভুক্ত করে। নির্দেশ না দেওয়া পর্যন্ত উপেক্ষিত ফাইলগুলো বাদ থাকে, তাই --ignored=matching এমন উপেক্ষিত পাথগুলো প্রকাশ করে যা ইগনোর নিয়মের সাথে মিলে যায়। --ignore-submodules=none কনফিগারেশন লুকানোর চেষ্টা করলেও স্ট্যাটাসকে সাবমডিউলের পরিবর্তন রিপোর্ট করতে বাধ্য করে। গিট এই স্ট্যাটাস মোডগুলোর বিবরণ নথিভুক্ত করেছে এবং উল্লেখ করেছে যে উপেক্ষিত পাথগুলো একটি স্বতন্ত্র স্ট্যাটাস মার্কার পায়। গিট স্ট্যাটাস সংক্রান্ত ডকুমেন্টেশন

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

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

সাবমডিউল এবং ইনডেক্স ফ্ল্যাগ পরীক্ষা করুন

সাবমডিউলযুক্ত একটি রিপোজিটরি তার শীর্ষ স্তরে পরিচ্ছন্ন দেখাতে পারে, যেখানে কোনো একটি সাবমডিউলে স্থানীয় সম্পাদনা, আনট্র্যাকড ফাইল বা ভিন্ন কোনো চেক-আউট করা কমিট থাকতে পারে। উপরের প্রসারিত স্ট্যাটাস কমান্ডটি গিটকে সাবমডিউলের অবস্থা উপেক্ষা না করতে বলে। আপনি নির্দিষ্ট সাবমডিউল ডিরেক্টরিতে প্রবেশ করে সেখানেও git status --untracked-files=all চালাতে পারেন; প্রতিটি সাবমডিউলের নিজস্ব ওয়ার্কিং ট্রি এবং স্ট্যাটাস থাকে।

তুলনামূলক কম পরিচিত ক্ষেত্রে, গিটের ইনডেক্সে এমন কিছু ফ্ল্যাগ থাকতে পারে যা পাথগুলোর সাথে গিটের আচরণকে প্রভাবিত করে। assume-unchanged গিটকে ধরে নিতে বলে যে একটি ফাইল ইনডেক্সের সাথে মিলে যায়, এবং skip-worktree পুল করার মতো ক্রিয়াকলাপের সময় একটি পাথ আপডেট করা এড়িয়ে যেতে পারে। অস্বাভাবিক এন্ট্রিগুলো পরীক্ষা করুন এভাবে:

git ls-files -v

এটি ইনডেক্স ট্যাগসহ ট্র্যাকড পাথগুলো তালিকাভুক্ত করে; ছোট হাতের ট্যাগগুলো assume-unchanged এন্ট্রি নির্দেশ করতে পারে, আর S নির্দেশ করে skip-worktree। এটিকে পরিদর্শনের একটি সূত্র হিসেবে বিবেচনা করুন, পরিচ্ছন্ন করার কমান্ড হিসেবে নয়। পুরো রিপোজিটরি জুড়ে অন্ধভাবে ফ্ল্যাগগুলো সাফ করবেন না; যদি ক্ষতিগ্রস্ত কোনো পাথের নাম উল্লেখ করা হয়, তবে এর ইনডেক্স অবস্থা পরিবর্তন করার আগে এর বিষয়বস্তু এবং প্রজেক্টের sparse-checkout সেটআপ পরীক্ষা করুন। গিট আপডেট-ইনডেক্স সংক্রান্ত ডকুমেন্টেশন

যদি বার্তাটি ভিন্ন হয়ে যাওয়া ব্রাঞ্চ (diverged branches) সম্পর্কে হয়

একটি পরিচ্ছন্ন ওয়ার্কিং ট্রির অর্থ এই নয় যে আপনার স্থানীয় ব্রাঞ্চ এবং এর আপস্ট্রিমের ইতিহাস একই। কোন ব্রাঞ্চটি চেক আউট করা আছে এবং এটি কী ট্র্যাক করছে তা পরীক্ষা করুন:

git branch --show-current
git branch -vv
git status --short --branch

স্ট্যাটাস এবং ব্রাঞ্চ আউটপুট দেখাতে পারে যে স্থানীয় ব্রাঞ্চটি তার আপস্ট্রিম থেকে এগিয়ে, পিছিয়ে নাকি ভিন্ন হয়ে গেছে। গিট পুল প্রথমে দূরবর্তী পরিবর্তনগুলো ফেচ করে এবং তারপর কনফিগার করা আপস্ট্রিমকে একীভূত করে। এর ডিফল্ট ফাস্ট-ফরওয়ার্ড-অনলি আচরণ বন্ধ হয়ে যায় যখন স্থানীয় এবং দূরবর্তী ব্রাঞ্চগুলো ভিন্ন হয়ে যায়; এটি একটি ইতিহাস নীতি (history policy), কোনো অসংরক্ষিত (uncommitted) ফাইল পরিবর্তনের প্রমাণ নয়। গিট পুল সংক্রান্ত ডকুমেন্টেশন

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

পরবর্তী পরীক্ষাটি বেছে নিতে ত্রুটিটি ব্যবহার করুন

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

সূত্রসমূহ