কীভাবে আপনি গিট থেকে একটি অবৈধ দূরবর্তী শাখা রেফারেন্স সরিয়ে ফেলবেন?


731

আমার বর্তমান রেপোতে আমার নিম্নলিখিত আউটপুট রয়েছে:

$ git branch -a
* master
  remotes/origin/master
  remotes/public/master

আমি remotes/public/masterশাখা তালিকা থেকে মুছতে চাই :

$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.

এছাড়াও, এর ফলাফল git remoteআশ্চর্যজনক, যেহেতু এটি তালিকাবদ্ধ করে না public:

$ git remote show 
origin

আমি কীভাবে শাখা তালিকা থেকে 'রিমোট / পাবলিক / মাস্টার' মুছতে পারি?

আপডেট করুন, git pushকমান্ডটি চেষ্টা করেছেন :

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

31
কি git remote prune [remote-name]বা git fetch -p [remote-name]আপনার দৃশ্যকল্প কাজ নাও? এটি git gcকরা সাধারণভাবে প্রয়োজনের চেয়ে অনেক বেশি শক্তিশালী।
rjmunro

6
git remote prune [remote-name]গিট এসএনএন দিয়ে কাজ করবে না, যদিও দুটোই git gc... git branch -rd origin/nameযদিও কাজ করে না। @ ক্যাসি, আপনার সম্ভবত দ্বিতীয় উত্তরটি নির্বাচন করা উচিত - এটি কিছুটা কম বিপজ্জনক।
nnot101

4
আমি এই প্রশ্ন ভালোবাসি। প্রায় প্রতি মাসে ফিরে আসছেন
অলকিম্যান

সম্পর্কিত, যদি কোনও ডুপ লক্ষ্য না হয়: স্থানীয়ভাবে এবং দূরবর্তীভাবে একটি গিট শাখা মুছুন

2
ভবিষ্যতে n00b গিটার ত্রুটি এড়াতে, আমি master... বিশেষ করে রিমোটে মোছার সময় ভিন্ন উদাহরণ শাখা ব্যবহার করার পরামর্শ দিই ।
21:30:30 এপ্রাইসেন্স

উত্তর:


743

আপনার একটি ক্লিনআপের প্রয়োজন হতে পারে:

git gc --prune=now

অথবা আপনার প্রয়োজন হতে পারে ছাঁটাই:

git remote prune public

আলুবোখারা

<বাসী> এর অধীনে সমস্ত বাসি ট্র্যাকিং শাখাগুলি মোছা করে। এই বাসি শাখাগুলি <নাম> দ্বারা উল্লিখিত রিমোট রিপোজিটরি থেকে ইতিমধ্যে সরানো হয়েছে, তবে স্থানীয়ভাবে "রিমোট / <নাম>" এ উপলব্ধ।

--Dry-run অপশনের সাহায্যে কোন শাখাগুলি ছাঁটাই করা হবে তা জানান, তবে আসলে এগুলি ছাঁটাই করবেন না।

যাইহোক, এটি প্রদর্শিত হয় এটি আগে পরিষ্কার করা উচিত ছিল

git remote rm public 

RM

<name> নামক রিমোটটি সরান। রিমোটের জন্য সমস্ত দূরবর্তী ট্র্যাকিং শাখা এবং কনফিগারেশন সেটিংস সরানো হয়েছে।

সুতরাং এটি হতে পারে আপনি নিজের কনফিগার ফাইলটি সম্পাদনা করুন এবং এটি ঘটেনি বা আপনার বিশেষাধিকারের সমস্যা রয়েছে।

সম্ভবত এটি আবার চালান এবং দেখুন কি ঘটে।


পরামর্শ প্রসঙ্গে

আপনি যদি পুনর্বিবেচনার লগগুলি একবার দেখুন , আপনি নোট করবেন আমি আরও "সঠিক" কৌশলগুলির পরামর্শ দিয়েছি, যা কারণেই হোক না কেন তাদের ভান্ডারটিতে কাজ করতে চান না।

আমি সন্দেহ করি যে ওপি এমন কিছু করেছে যা তাদের গাছটিকে একটি অসামঞ্জস্যপূর্ণ অবস্থায় ফেলে দিয়েছে যা এর ফলে কিছুটা অদ্ভুত আচরণ git gcকরতে শুরু করেছে এবং বাম দিকের ক্রাফ্টটি ঠিক করা দরকার ছিল।

সাধারণত git branch -rd origin/badbranch স্থানীয় ট্র্যাকিং শাখার git push origin :badbranchনকশাক করার জন্য , বা একটি দূরবর্তী শাখাকে শক্ত করার জন্য যথেষ্ট , এবং সাধারণত আপনাকে কখনও কল করার দরকার পড়বে নাgit gc


4
আমি দূরবর্তী দিকের শাখাটি মুছতে চাই না। আমি মনে করি একটি সূক্ষ্ম পার্থক্য আছে।
সেমিসিগিন্টি

2
তবে, প্রশ্নটি কার্যকরভাবে জিজ্ঞাসা করছে "আমি কীভাবে একটি দূরবর্তী শাখা মুছব"। এই পাথগুলি কী তা বোঝায়।
কেন্ট ফ্রেড্রিক

1
আমি বিষয়টিকে পুনরায় লিখব যদি আমি এটি যা জিজ্ঞাসা করি তা আরও স্পষ্ট করে দেয় তবে কমান্ডটি আমার সমস্যাটি ঠিক কী তা দেখায়।
সেমিসিগিন্টি

40
git gcএখানে প্রয়োজন নেই, তবে git remote pruneনিজে নিজে জিনিসগুলি মুছে ফেলার চেয়ে সুরক্ষিত বোধ করেন git branch -rd, যেহেতু গিটটি যাচাই করে যা দূরবর্তী শাখাগুলি করা হয়।
মাইক সেপলোজিট

3
এটি আমার পক্ষে কার্যকর হয়নি - তবে 'গিট শাখা -২' ভাল কাজ করেছে।
dsummersl

683

আপনার যা করা দরকার তা হ'ল

git fetch -p

এটি আপনার সমস্ত স্থানীয় শাখাগুলি মুছে ফেলবে যা দূর থেকে মুছে ফেলা হয়েছে।

আপনি যদি 1.8.5+ গিট এ থাকেন তবে আপনি এটি স্বয়ংক্রিয়ভাবে সেট করতে পারেন

git config fetch.prune true

অথবা

git config --global fetch.prune true

7
এটিই আমি পাশাপাশি খুঁজছিলাম - প্রশ্নটি একটি সাধারণ পরিস্থিতিটির চেয়ে জটিল পরিস্থিতিকে বর্ণনা করছে।
rjmunro

22
আমি স্থানীয় শাখাগুলি মুছে ফেলার একটি উপায় খুঁজছি যেখানে সংশ্লিষ্ট দূরবর্তীটি মুছে ফেলা হয়েছে, তবে এটি আমার পক্ষে কার্যকর নয়। কোন ধারণা কেন?
জ্যাকোকনর

11
এটি দূরবর্তী / উত্সে তালিকাবদ্ধ শাখাগুলি সরিয়ে দেয় তবে স্থানীয় ট্র্যাকিং শাখাগুলি মুছে দেয় না, যা গুরুত্বপূর্ণ।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

@ ক্যাপকেকে যেহেতু আপনি আমার প্রথম সম্পাদনাটি রোল করেন নি (যা গিট ১.৮.৫++ সম্পর্কে ভুল তথ্য ফিক্স করছে), আপনি এখন এটি ভুল করেছেন this আমার দ্বিতীয় সম্পাদনাটি যা আমি রেখেছিলাম তা ঠিক করে দিচ্ছিল যা এখন আবার আছে (আপনার রোলব্যাক সহ)। আসল থাকতে দয়া করে এগিয়ে যান এবং আরও একটি সম্পাদনা ফিরে করুন। ধন্যবাদ।
ফেরেন্টকোডার

@ স্পারভেন্টকোডার আমি আপনার শেষ সম্পাদনাটি দুবার পরীক্ষা করে দেখেছি এবং এতে ফিরে এসেছি। ওপি পছন্দ না করলে আবার রোলব্যাক করতে পারে। ধন্যবাদ।

319
git push public :master

এটি masterকেন্ট ফ্রেড্রিক উল্লেখ করেছে যে প্রত্যন্ত শাখাটি মুছে ফেলা হবে ।

রিমোট-ট্র্যাকিং শাখাগুলি তালিকা করতে:

git branch -r

একটি দূরবর্তী ট্র্যাকিং শাখা মুছতে:

git branch -rd public/master

6
এটি আমাকে গিট-এসএনএন দূরবর্তী ভূতের শাখা অপসারণ করতে সহায়তা করেছে।
নিক

9
git branch -rd removed_remote/branchআমার পক্ষে কাজ করেছিল, যখন git gc --prune=nowমূল্যহীন ছিল।
rchampourlier

2
আমি git pruneকোনও সমস্যা ছাড়াই ব্যবহার করতে সক্ষম হয়েছি , তবে আমার সহকর্মী যিনি আমাদের প্রধান রেপো ** কেবল ** করতে পারেন git branch -rd public/masterতার পরিবেশ পরিষ্কার করার জন্য স্টাইল সমাধানটি ব্যবহার করুন ।
হাবিল

3
git branch -rd public/masterআমি কি অনুপস্থিত ছিল। আমার ছিল heroku/masterএবং herkou/master... হাহাকার
অ্যারোন

@ আরচ্যাম্পোরিয়ারি ১০০% মূল্যহীন নয় - আপনার গিট রেপো যদি বড় হয় তবে অব্যবহৃত শাখা অপসারণ কিছু পরিস্থিতিতে ডিস্কের অনেক জায়গা মুক্ত করতে পারে।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

159

আপনার যা করা দরকার তা হ'ল

$ git branch -rd origin/whatever 

এটা খুব সহজ। এখানে কোনও জিসি কল করার কোনও কারণ নেই।


1
আপনি কীভাবে "ধাক্কা" দিয়ে গিথুবকে মুছবেন?
থুফির

14
@ তুফির এই প্রশ্নটি সম্পর্কে যা ছিল তা নয়। যখন স্থানীয় রেপোতে আপনার অবৈধ দূরবর্তী রেফারেন্স থাকে তখন এই প্রশ্নটি স্পষ্টতই ছিল, তবে সেই শাখাটি আর দূরবর্তী সার্ভারে আর বিদ্যমান নেই। আপনার প্রশ্নের উত্তর হ'ল গিট পুশ উত্স: যাই হোক না কেন
জেপসওয়াইন

হ্যাঁ, যদি একটি শাখা মুছে ফেলা হয় এমন দূরবর্তী রেপোতে যদি এমন কিছু ঘটে থাকে তবে আপনার স্থানীয় মেশিনে আপনার কাছে সেই দূরবর্তী শাখার উল্লেখ রয়েছে তবে এটি পরিষ্কার করার জন্য আমার আসল উত্তরে আমি যা রেখেছি তা আপনাকে করতে হবে।
jpswain

6
আপনার যদি একটি বড় পরিচ্ছন্নতার কাজ থাকে (প্রচুর ঝোলা রিমোট), আপনি কেবল এমন কিছু দিয়ে সমস্ত দূরবর্তী শাখাগুলি মুছতে পারেন git branch -rd $(git branch -r)তারপরে একটি আনার মাধ্যমে বৈধগুলি পুনরায় স্থাপন করতে পারেন ।
nobar

আমার অবস্থাটি ছিল যে আমি git config -eআমার রিমোটটির নতুন নামকরণ করেছি। আমি দূরবর্তী নতুন নামকরণ mineকরা origin। তারপরে, এই সমাধানটিই আমার পক্ষে সবচেয়ে ভাল কাজ করেছিল:git branch -rd $(git branch -r | grep 'mine/')
স্টিভেন লু

70

git gc --prune=now আপনি যা চান তা নয়

git remote prune public

অথবা git remote prune origin# যদি রিমোট উত্সটি চালিয়ে যায়

আপনি কি চান


6
@ ক্যাসি $ গিট জিসি # গিট ফাইলগুলিকে রিসোসিটোরির গতি বাড়ানোর জন্য একটি ডিফ্র্যাগমেন্টের মতো করে $ গিট রিমোট প্রুন উত্স # মুছে ফেলা হবে "গিট ব্রাঞ্চ -আর | গ্রেপ অরিজিন" এর সাথে প্রদর্শিত বালি দূরবর্তী শাখাগুলি। প্রশ্নটি যা জিজ্ঞাসা করছে তা বিশ্বাস করি। সুতরাং, কমান্ডগুলি সম্পূর্ণ আলাদা।
জিভ

29

যখন রেফ প্যাক করা হয়েছিল তখন গৃহীত উত্তর আমার পক্ষে কাজ করে না। এটি অবশ্য করে:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public

আমার জন্য কাজ করেছেন। নিয়মিত গিট শাখা-ডি কাজ করছিল না, ত্রুটি ফিরে পেয়েছিল যে শাখাটি নেই, কারণ আমি "অরিজিনাল" নামক উত্সটি সরিয়েছি, যা ভুলক্রমে তৈরি হয়েছিল, সরাসরি .git / কনফিগার ফাইলে।
মাইক্রব

আমার .git / কনফিগারেশন থেকে অজান্তেই বাদ দেওয়া শাখাগুলি মুছে ফেলার জন্য আমাকে এই পদ্ধতিটি ব্যবহার করতে হয়েছিল (যা কোনও সম্পর্কযুক্ত দুর্নীতির কারণে পুনর্নির্মাণ করতে হয়েছিল)। এটি খুব খারাপ যে এই উত্তরটি এতদূর ছিল যে শৃঙ্খলাবদ্ধভাবে শেষ পর্যন্ত আমি এটি লক্ষ্য করলাম না আমি সমাধানটি খুঁজে পেয়েছি এবং এটি গ্রহণযোগ্য উত্তরে যুক্ত করতে চলেছি!
তারানকি

এসএনএনজিগিট ব্যবহার করার পরে এটি আমার প্রয়োজন ছিল। এখানে অনেকগুলি রিমোট / এসএনএন / * শাখা ছিল। প্রথমে একটি বোগাস 'এসএনএন' রিমোট তৈরি করতে হয়েছিল।
স্যাম

7

আমার ক্ষেত্রে আমি সংরক্ষিত এন্ট্রিগুলি মোছার চেষ্টা করছিলাম .git/packed-refs। আপনি এই সাধারণ পাঠ্য ফাইলটি সম্পাদনা করতে এবং এটি থেকে এন্ট্রিগুলি মুছতে পারেন যা git br -Dকীভাবে স্পর্শ করতে জানেন না (কমপক্ষে 1.7.9.5 ভারে)।

আমি এই সমাধানটি এখানে পেয়েছি: https://stackoverflow.com/a/11050880/1695680


বাহ, এটা আমাকে সাহায্য করেছে। আমার সহকর্মী চেষ্টা করেছিলেন, ভিএস পুনরায় চালু করুন, তার কম্পিউটার পুনরায় চালু করুন কিছুই কাজ করেনি, তিনি তার স্থানীয় রেপো মোছা দিয়েছিলেন এবং এ থেকে মুক্তি পেতে সমস্ত কিছুই
টানেন

1
আজ আমি ঝুঁকেছি যে এই প্যাকড-রেফস ফাইলটি একটি অংশ হিসাবে তৈরি হয়েছে git gc, যখন এটি আপনার কমিটগুলি একটি উচ্চ-সংকুচিত সংরক্ষণাগারটিতে প্যাক করে এটি রেফারেন্সগুলি একটি একক সরল পাঠ্য ফাইলে স্থানান্তরিত করে, সম্ভবত অপ্টিমাইজেশনের উদ্দেশ্যে; আমি আশা করি গিটারের ভবিষ্যতের সংস্করণগুলি রেফ git br -D ...প্যাক করতে পারে ।
থারস্মমনার


3

আমি জানতাম না git branch -rd, সুতরাং যেভাবে আমি নিজের মতো করে সমস্যাগুলি সমাধান করেছি তা হ'ল আমার রেপোকে দূরবর্তী রেপো হিসাবে বিবেচনা করা এবং একটি রিমোট মুছতে। git push . :refs/remotes/public/master। অন্য উপায়গুলি যদি কাজ না করে এবং আপনার কিছু অদ্ভুত রেফারেন্স থাকে যা থেকে আপনি মুক্তি পেতে চান তবে এই কাঁচা পথটি নিশ্চিত fire এটি আপনাকে কোনও ধরণের রেফারেন্স মুছে ফেলার (বা তৈরি করুন!) সঠিক নির্ভুলতা দেয়।


2

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

তবে আমরা বিশ্বাস করি যে দুর্নীতিবাজদের জন্য কিছুই করা হয়নি। এনএফএস স্ন্যাপশট করে তাই আমি প্রতিটি "পূর্ববর্তী সংস্করণ" পর্যালোচনা করে দেখেছি যে তিন দিন আগে, এমপিতে রিপোজিটরির আকারটি 282MB থেকে 33MB তে চলে গিয়েছিল এবং প্রায় 1,403 টি নতুন ফাইল এবং 300 ফোল্ডার রয়েছে। আমি আমার সহকর্মীদের জিজ্ঞাসা করেছি এবং একজন সেদিন একটি ধাক্কা দেওয়ার চেষ্টা করেছিল - তারপরে এটি বাতিল করে।

আমি এটিকে ঠিক সেই তারিখের পূর্বে পুনরুদ্ধার করতে এনএফএস "পুনরুদ্ধার" কার্যকারিতাটি ব্যবহার করেছি এবং এখন প্রতিটি কাজ আবার ঠিকঠাক কাজ করছে। আমি আগে ছাঁটাই চেষ্টা করেছিলাম, মনে হয় না। কঠোর পরিচ্ছন্নতা কাজ করতে পারে।

আশা করি এটি একদিন অন্য কাউকে সাহায্য করতে পারে!

স্থূলবুদ্ধি বাচাল ব্যক্তি


2

আমারও একই সমস্যা ছিল। উত্তরগুলির কোনওটিই সহায়তা করেনি। আমার ক্ষেত্রে, আমি দুটি মুছে ফেলা দূরবর্তী সংগ্রহস্থল স্থায়ীভাবে প্রদর্শিত হয়েছিল।

আমার শেষ ধারণাটি হ'ল এটির সমস্ত উল্লেখ হাত থেকে মুছে ফেলা।

ধরা যাক ভাণ্ডারটিকে "রেপো" বলা হয়। আমি করেছিলাম:

find .git -name Repo 

সুতরাং, আমি .git ফোল্ডার থেকে সংশ্লিষ্ট ফাইল এবং ডিরেক্টরিগুলি মুছলাম ( এই ফোল্ডারটি আপনার রেল অ্যাপগুলিতে বা আপনার কম্পিউটারে https://stackoverflow.com/a/19538763/6638513 পাওয়া যাবে )।

তারপরে আমি করলাম:

grep Repo -r .git

এটি এমন কিছু পাঠ্য ফাইল পেয়েছে যাতে আমি সংশ্লিষ্ট লাইনগুলি সরিয়েছি। এখন, সবকিছু ঠিক আছে বলে মনে হচ্ছে।

সাধারণত, আপনার এই কাজটি গিটার জন্য ছেড়ে দেওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.