আমি ইতিমধ্যে একটি প্রশ্নের উত্তর দেবো না যার ইতিমধ্যে 16 টি উত্তর রয়েছে তবে অন্য সমস্ত উত্তরগুলি ভুল এবং সঠিক উত্তরটি এত সহজ। প্রশ্নটি বলে, "সমস্ত ট্র্যাকিং শাখাগুলি মুছে ফেলার কি সহজ উপায় আছে যার দূরবর্তী সমতুল্য আর নেই?"
যদি "সরল" অর্থ হ'ল একসাথে সবগুলি মুছে ফেলা, ভঙ্গুর নয়, বিপজ্জনক নয়, এবং সমস্ত পাঠকের কাছে থাকা সরঞ্জামগুলির উপর নির্ভর না করে, তবে সঠিক উত্তরটি হ'ল: না।
কিছু উত্তর সহজ, তবে তারা যা বলেছিল তা করে না। অন্যরা যা জিজ্ঞাসিত হয়েছিল তা করে, তবে সহজ নয়: সকলেই টেক্সট-ম্যানিপুলেশন কমান্ড বা স্ক্রিপ্টিং ভাষার মাধ্যমে গিট আউটপুট পার্সিংয়ের উপর নির্ভর করে, যা প্রতিটি সিস্টেমে উপস্থিত থাকতে পারে না। তারপরে, বেশিরভাগ পরামর্শই পোরস্লেইন কমান্ড ব্যবহার করে, যার আউটপুট স্ক্রিপ্ট দ্বারা বিশ্লেষণের জন্য ডিজাইন করা হয়নি ("চীনামাটির বাসন" মানবিক ক্রিয়াকলাপের উদ্দেশ্যে চিহ্নিত আদেশগুলি বোঝায়; স্ক্রিপ্টগুলিকে নিম্ন স্তরের "নদীর গভীরতানির্ণয়" কমান্ড ব্যবহার করা উচিত)।
আরও পড়া:
যদি আপনি এটি নিরাপদে করতে চান তবে প্রশ্নের ক্ষেত্রে ব্যবহারের ক্ষেত্রে (আবর্জনা-সংগ্রহ ট্র্যাকিং শাখাগুলি যা সার্ভারে মুছে ফেলা হয়েছে তবে এখনও স্থানীয় শাখা হিসাবে বিদ্যমান রয়েছে) এবং কেবলমাত্র উচ্চ-স্তরের গিট কমান্ড সহ, আপনাকে করতে হবে
git fetch --prune
(বা git fetch -p
, যা একটি উপনাম, বা git prune remote origin
আনতে ছাড়া একই কাজ করে এবং সম্ভবত আপনি বেশিরভাগ সময় যা চান তা সম্ভবত নয়)।
- মুছে ফেলা হিসাবে রিপোর্ট করা যে কোনও দূরবর্তী শাখা নোট করুন। বা এগুলি পরে খুঁজে পেতে
git branch -v
(কোনও অনাথ ট্র্যাকিং শাখা "[[]] চিহ্নিত করা হবে)।
git branch -d [branch_name]
প্রতিটি অনাথ ট্র্যাকিং শাখায়
(যা অন্য কয়েকটি উত্তর প্রস্তাব করে)।
আপনি যদি কোনও সমাধানের স্ক্রিপ্ট করতে চান, তবে for-each-ref
এটিই আপনার প্রারম্ভিক পয়েন্ট, যেমন মার্ক লংএয়ারের উত্তর এবং এখানে অন্য প্রশ্নের উত্তর রয়েছে , তবে আমি শেল স্ক্রিপ্ট লুপ না লিখে, বা xargs বা কিছু ব্যবহার না করে এটিকে কাজে লাগানোর উপায় দেখতে পাচ্ছি না ।
পটভূমি ব্যাখ্যা
কী হচ্ছে তা বোঝার জন্য, আপনাকে প্রশংসা করতে হবে, ট্র্যাকিং শাখার পরিস্থিতিতে আপনার একটি শাখা নয়, তিনটি রয়েছে। (এবং মনে রাখবেন যে "শাখা" এর অর্থ কেবল একটি অঙ্গীকারের নির্দেশক))
একটি ট্র্যাকিং শাখা দেওয়া feature/X
, দূরবর্তী সংগ্রহস্থল (সার্ভার) এর এই শাখা থাকবে এবং এটি কল করবে feature/X
। আপনার স্থানীয় সংগ্রহস্থলের একটি শাখা রয়েছে remotes/origin/feature/X
যার অর্থ, "এটিই দূরবর্তী আমাকে তার বৈশিষ্ট্যটি বলেছিল / এক্স শাখাটি ছিল, শেষ বার আমরা কথা বললাম" এবং শেষ অবধি, স্থানীয় সংগ্রহস্থলের একটি শাখা রয়েছে feature/X
যা আপনার সর্বশেষ প্রতিশ্রুতিতে নির্দেশ করে এবং এতে কনফিগার করা হয়েছে "ট্র্যাক" remotes/origin/feature/X
, যার অর্থ আপনি এগুলিকে সারিবদ্ধ রাখতে টানতে এবং ধাক্কা দিতে পারেন।
এক পর্যায়ে, কেউ feature/X
রিমোটে থাকা মুছে ফেলেছে । সেই মুহুর্ত থেকে, আপনি আপনার স্থানীয় feature/X
(যা আপনি সম্ভবত আর চান না, কারণ এক্স বৈশিষ্ট্যটির কাজ সম্ভবত সমাপ্ত) এর সাথে বাকী রয়েছেন এবং remotes/origin/feature/X
যা আপনার অবশ্যই নিরর্থক কারণ এর একমাত্র উদ্দেশ্য ছিল সার্ভারের শাখার অবস্থা মনে রাখা was ।
এবং গিট আপনাকে স্বয়ংক্রিয়ভাবে রিলান্ড্যান্ট পরিষ্কার করতে দেবে remotes/origin/feature/X
- যা সেটাই git fetch --prune
করে - তবে কোনও কারণে এটি আপনাকে স্বয়ংক্রিয়ভাবে মুছে ফেলতে দেয় না feature/X
... যদিও আপনার feature/X
এখনও অনাথ ট্র্যাকিংয়ের তথ্য রয়েছে, তাই এতে তথ্য রয়েছে সম্পূর্ণরূপে একত্রিত করা পূর্ববর্তী ট্র্যাকিং শাখাগুলি সনাক্ত করতে। (সর্বোপরি, এটি আপনাকে সেই তথ্য দিতে পারে যা আপনাকে নিজেরাই অপারেশন করতে দেয়))
* master
আমার সিস্টেমে রয়েছে। নিম্নলিখিত কমান্ডটি আমার পক্ষে কাজ করেছে:git branch -d $(git branch --merged |tail -n +2)