আপনার ম্যাকে গিট-এ যদি এখনও মুছে ফেলা ব্রাঞ্চগুলো দেখা যায়, তবে আপনার লোকাল রিপোজিটরি থেকে রিমোট-ট্র্যাকিং রেফারেন্সগুলো প্রুন করুন। টার্মিনাল খুলুন, রিপোজিটরি ফোল্ডারে যান, কোন রিমোটটি রিফ্রেশ করতে চান তা পরীক্ষা করুন, তারপর git fetch --prune origin চালান। এটি ফেচ করা রেফারেন্সগুলোকে আপডেট করে এবং origin-এর সাথে সম্পর্কিত পুরোনো রেফারেন্সগুলো সরিয়ে দেয়; এটি রিমোট সার্ভার থেকে ব্রাঞ্চ মুছে ফেলে না বা আপনার লোকাল ব্রাঞ্চগুলো সরিয়ে দেয় না। Git-এর git fetch ডকুমেন্টেশন

প্রুন করার সময় কী রিফ্রেশ হয়?

একটি রিমোট-ট্র্যাকিং ব্রাঞ্চ হলো রিমোট রিপোজিটরির কোনো ব্রাঞ্চের লোকাল রেকর্ড। উদাহরণস্বরূপ, origin/feature-x রিমোট ব্রাঞ্চের সর্বশেষ ফেচ করা অবস্থা নির্দেশ করে। এটি feature-x নামের একটি লোকাল ব্রাঞ্চ থেকে সম্পূর্ণ আলাদা। রিমোট ব্রাঞ্চটি মুছে ফেলা হলেও, গিট প্রুন না করা পর্যন্ত আপনার লোকাল রেফারেন্সটি থেকে যেতে পারে। গিট-এর ডিফল্ট ফেচ ম্যাপিং সাধারণত refs/remotes/origin/-এর অধীনে রিমোট ব্রাঞ্চগুলো সংরক্ষণ করে, যদিও একটি রিপোজিটরি ভিন্ন ম্যাপিং ব্যবহার করতে পারে। কনফিগার করা ফেচ রেফস্পেক কীভাবে রিমোট ব্রাঞ্চগুলোকে ম্যাপ করে তা গিট নথিবদ্ধ করেছে।

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

টার্মিনাল থেকে রেফারেন্স রিফ্রেশ করুন

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

  1. টার্মিনাল খুলুন এবং রিপোজিটরি ফোল্ডারে যান। আপনি যদি এর পাথ জানেন এবং এতে স্পেস থাকে, তবে এটি কোটেশনের ভেতরে রাখুন, উদাহরণস্বরূপ:
cd "/Users/sam/Projects/Client App"

উদাহরণ পাথটি আপনার রিপোজিটরির আসল পাথ দিয়ে প্রতিস্থাপন করুন। আপনি বর্তমানে কোথায় আছেন তা নিশ্চিত না হলে, pwd বর্তমান ডিরেক্টরি প্রদর্শন করে। রিপোজিটরির ভেতর থেকেই গিট কমান্ডগুলো চালান।

  1. রিপোজিটরি এবং রিমোটের নাম নিশ্চিত করুন:
git status --short --branch
git remote -v

git remote -v কনফিগার করা রিমোটের নাম এবং URL-এর তালিকা দেখায়। সাধারণত origin ব্যবহৃত হয়, তবে যে সার্ভারের রেফারেন্স আপনি রিফ্রেশ করতে চান তার জন্য প্রদর্শিত নামটি ব্যবহার করুন। রিপোজিটরিতে একাধিক রিমোট থাকলে, শুধুমাত্র নির্দিষ্ট রিমোটটি প্রুন করুন।

  1. পুরোনো রেফারেন্সগুলো সরানোর আগে সেগুলোর প্রিভিউ দেখে নিন:
git remote prune --dry-run origin

গিট ডিলিট না করেই কোন কোন রেফারেন্স প্রুন করা হবে তা রিপোর্ট করে। ড্রাই-রান অপশনটি git remote prune-এর অংশ; এটি নতুন ব্রাঞ্চ টিপস ফেচ করে না। Git-এর git remote ডকুমেন্টেশন

  1. প্রিভিউ যদি আপনার প্রত্যাশার সাথে মেলে, তবে এক ধাপে রিফ্রেশ এবং প্রুন করুন:
git fetch --prune origin

এটি রিমোটের কনফিগার করা রেফস্পেক অনুযায়ী ফেচ করে এবং সেই ম্যাপিংয়ের আওতাভুক্ত পুরোনো রেফারেন্সগুলো সরিয়ে দেয়। গিট-এর ফেচ আউটপুটে প্রুন করা রেফারেন্সগুলোকে - দিয়ে চিহ্নিত করা হয়। আপডেট ফেচ না করে কেবল প্রুন করতে চাইলে, এর পরিবর্তে git remote prune origin ব্যবহার করুন। গিট উভয় এককালীন পদ্ধতিই নথিবদ্ধ করেছে।

  1. ফলাফল পরীক্ষা করুন:
git branch --remotes
git branch --all

শুধুমাত্র রিমোট তালিকাটিতে রিমোট-ট্র্যাকিং ব্রাঞ্চগুলো দেখা যায়; অল-ব্রাঞ্চেস তালিকায় রিমোট-ট্র্যাকিং এবং লোকাল উভয় ব্রাঞ্চ অন্তর্ভুক্ত থাকে। রিমোট তালিকা থেকে বাদ পড়া ব্রাঞ্চ তখনও লোকাল ব্রাঞ্চ হিসেবে বিদ্যমান থাকতে পারে, এবং প্রুনিং প্রক্রিয়া তা সরিয়ে দেয় না।

পুরোনো রেফারেন্সটি যদি থেকেই যায়

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

কমান্ডটি যদি কোনো নেটওয়ার্ক বা প্রমাণীকরণ (authentication) ত্রুটি দেখায়, তবে বুঝতে হবে গিট রিমোট ফেচ সম্পন্ন করতে পারেনি; সংযোগ বা অ্যাক্সেসের সমস্যা সমাধান করে আবার চেষ্টা করুন। আপনি যদি বিশেষভাবে ট্যাগগুলোও প্রুন করতে না চান, তবে --prune-tags যুক্ত করা এড়িয়ে চলুন: গিট সতর্ক করে যে স্পষ্ট ট্যাগ রেফস্পেকের কারণে সেই রিমোট থেকে অনুপস্থিত লোকাল ট্যাগগুলো মুছে যেতে পারে। Git-এর প্রুনিং ডকুমেন্টেশনে এই ট্যাগ সংক্রান্ত সতর্কবার্তা ব্যাখ্যা করা হয়েছে।

বর্তমান রিমোট-ট্র্যাকিং তথ্য এবং পরিচ্ছন্নতা একসাথে পেতে git fetch --prune origin ব্যবহার করুন। সম্ভাব্য ব্রাঞ্চগুলো আগে দেখে নিতে চাইলে প্রথমে git remote prune --dry-run origin ব্যবহার করুন, অথবা ব্রাঞ্চ আপডেট ফেচ না করে কেবল পরিচ্ছন্ন করতে চাইলে git remote prune origin ব্যবহার করুন।

উৎস