গিট মুছে ফেলা রিমোটস: রিমোট রেফ উপস্থিত নেই


107

সংক্ষেপে;

  • আমি কীভাবে দূরবর্তী একাধিক মার্জ করা রিমোটগুলি মুছতে পারি?

আরও পটভূমি;

আমার কাছে দশটি রিমোটের সাথে একটি গিট রেপো রয়েছে যা মাস্টার হিসাবে মিশে গেছে been আমি এই রিমোটগুলি একবারে ব্যবহার করে মুছে ফেলতে পারি:

git push --delete origin myBranch-1234

তবে এটি সমস্ত রিমোটের জন্য একটি ধীর এবং ক্লান্তিকর প্রক্রিয়া। সুতরাং আমি এই আদেশটি চেষ্টা করছি:

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --mergedসমস্ত মার্জ করা দূরবর্তীগুলি তালিকাভুক্ত করে।
grep originকমান্ডটি উত্স অন্তর্ভুক্ত করতে বলে।
grep -v masterকমান্ডকে মাস্টার বাদ দেওয়ার নির্দেশ দেয়।
xargs git push origin --deleteরিমোটের তালিকা মুছতে কমান্ডকে বলে।

সব মিলে, আমি আশা করি এটি সমস্ত মার্জ করা রিমোটগুলি একত্রিত করে মুছে ফেলবে।

আমি যখন উপরের কমান্ডটি চালনা করি, আমি প্রতিটি মার্জ করা রিমোটের জন্য নিম্নলিখিতটি পাই;

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

তবে এই রিমোটগুলি বিদ্যমান আছে এবং আমি তাদের প্রত্যেককেই চেকআউট করতে পারি। অনেক সাইট এবং লোকেরা git fetch --pruneঅনুপস্থিত রেফারেন্সগুলি পরিষ্কার করতে চালানোর পরামর্শ দেয় । এটি কিছুই করে না কারণ এই প্রত্যন্তগুলির সমস্ত উপস্থিত রয়েছে।

সুতরাং আমি আপনাকে জিজ্ঞাসা, প্রিয় স্ট্যাক এক্সচেঞ্জ;

  • কেন আমি একটি রিমোট মুছতে পারি তবে অনেকগুলি নয়?
  • আমার আদেশ কি সঠিক?

আমি মনে করি আমি কিছু ছোট করছি। প্রতিবার যখন আমি এটি গবেষণা করি তখন মনে হয় আমি এটি সঠিকভাবে করছি তবে আমি উপরের ত্রুটিগুলি পাচ্ছি।

উত্তর:


226

আপনাকে প্রথমে দূরবর্তী শাখাগুলির স্থানীয় "ক্যাশে" ছাঁটাই করতে হতে পারে। চালানোর চেষ্টা করুন:

git fetch -p origin

মোছার আগে।


2
এটি আমার জন্য সমাধান করেছে, ধন্যবাদ! যাইহোক, কেন আমি আনব না কেন আপডেট হচ্ছে না --prune? আমার মতে এটি বেশ বিভ্রান্তিকর
dave0688

6
অনুসন্ধান থেকে এখানে আগত লোকদের জন্য কেবল একটি নোট - যদিও এটি এখানে উপস্থিত বেশিরভাগের পক্ষে এটি স্পষ্টভাবে কার্যকর, মূল সমস্যাটির ক্ষেত্রে এটি আসলে সঠিক নয় - ওপির সমস্যাটি ছিল তাঁর আদেশটি ভুলভাবে origin/শাখার নামগুলিতে অন্তর্ভুক্ত ছিল, যেমন বর্ণিত / অন্যান্য উত্তরে সমাধান করা হয়েছে।
কাপওয়ানটাএ

104

সেই শাখাগুলি কি দূরবর্তী (উত্স) থেকে সরানো হয়েছে? যদি হ্যাঁ, আপনি সহজভাবে করতে পারেন

git fetch --prune origin

অন্যথায় তারা স্থানীয়ভাবে মুছে ফেলার পরেও তারা ফিরে আসতে পারে।

আপডেট: আপনার কমান্ডটি আবার দেখে, দেখে মনে হচ্ছে আপনি এটি ভুলভাবে তৈরি করছেন। আপনি সম্ভবত চান

git push origin --delete myBranch-1234

তবে পরিবর্তে আপনি এমন কিছু করছেন

git push origin --delete origin/myBranch-1234

শাখাগুলির কোনওটিই উত্স থেকে সরানো হয়নি। আমি তাদের যে কোনও একটি চেকআউট করতে পারি।
Jqw

1
হ্যাঁ, কারণ আপনি দ্বিতীয় ক্ষেত্রে বিভিন্ন কমান্ড কার্যকর করেছেন।
মাইকোলা গুরুভ

1
আমি আপনার বক্তব্য বুঝতে পারি না। আমি জানি যে আমি দুটি পৃথক কমান্ড ব্যবহার করছি। দ্বিতীয় কেসটির সাথে সমস্ত মার্জ করা রিমোটগুলি পাওয়া যাচ্ছে git branch -r --mergedএবং তারপরে আমি সেগুলি মুছতে চেষ্টা করছি xargs git push origin --delete। কমান্ডটি রিমোটগুলি মুছে ফেলার চেষ্টা করছে তা বাদে যে এটি মনে করে remote ref does not exist
Jqw

1
আপনার দ্বিতীয়, পাইপযুক্ত কমান্ডে, xargsবাস্তবে কী সম্পাদিত হয় তা দেখতে ঠিক পাশের প্রতিধ্বনি দিন ।
মাইকোলা গুরুভ

2
@ জকিউডব্লিউ আপনি origin/শাখার নামের সাথে উপসর্গটি অন্তর্ভুক্ত করতে পারবেন না, গিটটি ইতিমধ্যে জানে যে আপনি চালুর সময় থেকেই আপনি উত্সের শাখাগুলির সাথে কাজ করছেন git push origin। মাইকোলার পরামর্শ ছিল কমান্ডের শেষ অংশটি xargs echoনা করে বরং করা echo xargs [...]
ম্যাথু

15

sed'উত্স /' অংশটি সরাতে এবং একটি প্রসারিত xargsঅংশ পরিবর্তন করতে ব্যবহার করুন ।

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.