সমস্ত স্থানীয় গিট শাখা মুছুন


323

আমি এমন একটি উন্নয়ন প্রক্রিয়া অনুসরণ করি যেখানে আমি প্রতিটি নতুন বৈশিষ্ট্য বা স্টোরি কার্ডের জন্য একটি নতুন স্থানীয় শাখা তৈরি করি। শেষ হয়ে গেলে আমি শাখাটি মাস্টারের সাথে একীভূত করি এবং তারপরে পুশ করি।

অলসতা বা ভুলে যাওয়ার মিশ্রণের কারণে সময়ের সাথে কী ঘটে থাকে তা হ'ল আমি স্থানীয় শাখাগুলির একটি বৃহত তালিকা নিয়ে শেষ করেছি, যার কয়েকটি (যেমন স্পাইকস) সংহত নাও হতে পারে।

আমি কীভাবে আমার সমস্ত স্থানীয় শাখা তালিকাভুক্ত করতে জানি এবং আমি জানি যে কীভাবে একটি একক শাখা অপসারণ করতে হবে তবে আমি ভাবছিলাম যে এমন কোনও গিট কমান্ড আছে যা আমাকে আমার সমস্ত স্থানীয় শাখা মুছতে দেয়?

git branch --mergedকমান্ডের আউটপুট নীচে দেওয়া হল ।

user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

তালিকাভুক্ত শাখাগুলি মুছে ফেলার সমস্ত প্রয়াস grep -v \*(নীচের উত্তর অনুসারে) ত্রুটির ফলে:

error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.

আমি ব্যবহার করছি:
Git 1.7.4.1
উবুন্টু 10.04
গনুহ ব্যাশ, সংস্করণ 4.1.5 (1) -release
গনুহ, grep 2.5.4


7
আমি আপনাকে অনুরোধ করছি @ অ্যান্ড্রু এর উত্তরটি গ্রহণ করুন!
রবার্ট সিমার


@ জিউলিওক্যাসিন প্রশ্নটি সেই শাখাগুলির সাথেও সম্পর্কিত যা সম্ভবত মার্জ করা হয়নি এবং আমি এটিকে পরিষ্কারভাবে প্রতিফলিত করতে প্রশ্ন আপডেট করেছি।
Louth স্বাগতম

উত্তর:


384

'গিট শাখা-ডি' সাবকম্যান্ড একাধিক শাখা মুছতে পারে। সুতরাং, @ sblom এর উত্তর সরলকরণ কিন্তু একটি সমালোচনামূলক xargs যুক্ত:

git branch -D `git branch --merged | grep -v \* | xargs`

বা, আরও সরলীকৃত:

git branch --merged | grep -v \* | xargs git branch -D 

গুরুত্বপূর্ণভাবে, @ অ্যান্ড্রুসি দ্বারা উল্লিখিত হিসাবে, git branchস্ক্রিপ্টিংয়ের জন্য ব্যবহার নিরুত্সাহিত করা হয়েছে। এড়াতে এ জাতীয় কিছু ব্যবহার করুন:

git for-each-ref --format '%(refname:short)' refs/heads | grep -v master | xargs git branch -D

মোছার বিষয়ে সতর্কতা সতর্কতা!

$ mkdir br
$ cd br; git init
Initialized empty Git repository in /Users/ebg/test/br/.git/
$ touch README; git add README; git commit -m 'First commit'
[master (root-commit) 1d738b5] First commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git branch Story-123-a
$ git branch Story-123-b
$ git branch Story-123-c
$ git branch --merged
  Story-123-a
  Story-123-b
  Story-123-c
* master
$ git branch --merged | grep -v \* | xargs
Story-123-a Story-123-b Story-123-c
$ git branch --merged | grep -v \* | xargs git branch -D
Deleted branch Story-123-a (was 1d738b5).
Deleted branch Story-123-b (was 1d738b5).
Deleted branch Story-123-c (was 1d738b5).

এই কমান্ডটি এখনও নীচের উত্তরের মন্তব্যে উল্লিখিত একই ত্রুটিগুলি রিপোর্ট করে। error:branch 'STORY-123-Short-Description' not found.তালিকাভুক্ত প্রতিটি শাখার জন্য।
Louth স্বাগতম

1
আমার জন্য কাজ কর; যোগ করা বিশদ সহ উপরে দেখুন।
GoZoner

1
সুতরাং, 1.7.10 গিট ব্যবহার করে কি আপনার সমস্যার সমাধান হয়েছে বা আপনি সরাসরি .git সংগ্রহস্থলে কাজ করতে পছন্দ করেন?
GoZoner

1
যদি আপনি কোনও error:branch 'STORY-123-Short-Description' not found.ত্রুটি পান তবে এটি সম্ভবত গিট রঙের সেটিংসের কারণে। এটি আমার জন্য কাজ করেছে ( --no-colorবিকল্পটি নোট করুন ):git branch --no-color --merged | grep -v \* | xargs git branch -D
মার্কক

3
SO এর একমাত্র উত্তর আমি খুঁজে পেয়েছি works ধন্যবাদ!
কেভিন সাটল

140

আমি গিথুব সম্পর্কিত এই বিষয়ে একটি মন্তব্যে একটি সুন্দর উপায় খুঁজে পেয়েছি :

git branch --merged master --no-color | grep -v master | grep -v stable | xargs git branch -d

সম্পাদনা করুন: নো-কালার অপশন এবং স্থিতিশীল শাখা বাদ দিয়ে (আপনার ক্ষেত্রে প্রয়োজন মতো অন্যান্য শাখা যুক্ত করুন)


2
অবশেষে, আমার যে সমাধানটির প্রয়োজন হয়েছে
কোড হুইস্পেরার

1
আমি এটি চেষ্টা করেছি কিন্তু error: branch 'my-branch-name' not found.প্রতিটি শাখায় পেতে থাকি । গিট সংস্করণ 1.8.3.4 (অ্যাপল গিট -47) ব্যবহার করে। কোন ধারণা কেন?
Wheresrhys

2
So. git for-each-ref --format '%(refname:short)' refs/heads/ | grep -v master | xargs git branch -d
Павел Тявин

1
এর সাথে একসাথে ব্যবহার শিখেছি। ধন্যবাদ
ভোলেম

1
ধন্যবাদ, খুব ভাল।
উঃ গুসেভ

105

এর আউটপুট পার্সিংয়ের git branchপ্রস্তাব দেওয়া হয় না এবং স্ট্যাক ওভারফ্লোতে ভবিষ্যতের পাঠকদের পক্ষে ভাল উত্তর নয়।

  1. git branchচীনামাটির বাসন কমান্ড হিসাবে পরিচিত। চীনামাটির কমান্ডগুলি মেশিনকে পার্স করার জন্য ডিজাইন করা হয়নি এবং গিটের বিভিন্ন সংস্করণের মধ্যে আউটপুট পরিবর্তন হতে পারে।
  2. ব্যবহারকারীর কনফিগারেশন অপশন রয়েছে যা আউটপুটটিকে git branchএমনভাবে পরিবর্তন করে যা পার্স করা কঠিন করে তোলে (উদাহরণস্বরূপ, রঙিনকরণ)। যদি কোনও ব্যবহারকারী সেট করে থাকে color.branchতবে আপনি আউটপুটে নিয়ন্ত্রণ কোডগুলি পাবেন, error: branch 'foo' not found.যদি আপনি এটি অন্য কোনও কমান্ডে পাইপ করার চেষ্টা করেন তবে এটির দিকে পরিচালিত হবে। আপনি --no-colorপতাকাটির সাথে এটিকে বাইপাস করতে পারেন git branch, তবে অন্যান্য ব্যবহারকারী কনফিগারেশনে কী জিনিসগুলি ভঙ্গ করতে পারে কে জানে।
  3. git branch পার্স করার জন্য বিরক্তিকর অন্যান্য কাজগুলি করতে পারে, যেমন বর্তমানে চেক করা শাখার পাশে একটি তারকাচিহ্ন স্থাপন করা

Git লেখককেএকটি এই বলার আছে প্রায় স্ক্রিপ্টিং সম্পর্কে git branchআউটপুট

বর্তমান শাখাটি কী তা জানতে, নৈমিত্তিক / অসাবধান ব্যবহারকারীরা গিট শাখার চারপাশে লিখিত থাকতে পারে, যা ভুল। আমরা স্ক্রিপ্টগুলিতে গিট শাখা সহ কোনও পোরস্লেইন কমান্ড ব্যবহারের বিরুদ্ধে সক্রিয়ভাবে নিরুৎসাহিত করি কারণ কমান্ডের আউটপুট মানুষের ব্যবহারের ক্ষেত্রে ব্যবহারের ক্ষেত্রে সহায়তা করার জন্য পরিবর্তিত হতে পারে।

উত্তরগুলি যেগুলিতে ম্যানুয়ালি ফাইল সম্পাদনা করার পরামর্শ দেয় .gitডিরেক্টরিগুলিতে (যেমন .git / রেফস / হেডস) একইভাবে সমস্যাযুক্ত (রেফগুলি পরিবর্তে .git / প্যাকড-রেফে থাকতে পারে, বা গিট ভবিষ্যতে অভ্যন্তরীণ বিন্যাস পরিবর্তন করতে পারে)।

গিট প্রদান করে for-each-ref শাখাগুলির একটি তালিকা পুনরুদ্ধার কমান্ড ।

গিট ২.7. এক্স --mergedবিকল্পটি প্রবর্তন করবে যাতে আপনি সংযুক্ত সমস্ত শাখা খুঁজে পেতে এবং মুছতে নীচের মতো কিছু করতে পারেনHEAD

for mergedBranch in $(git for-each-ref --format '%(refname:short)' --merged HEAD refs/heads/)
do
    git branch -d ${mergedBranch}
done

2.6.X এবং তার চেয়ে বড় গিট, আপনাকে সমস্ত স্থানীয় শাখা তালিকাভুক্ত করতে হবে এবং তারপরে তাদের একীভূত করা হয়েছে কিনা তা দেখতে পৃথকভাবে তাদের পরীক্ষা করতে হবে (যা উল্লেখযোগ্যভাবে ধীর এবং কিছুটা জটিল হবে)।

for branch in $(git for-each-ref --format '%(refname:short)' refs/heads/)
do
    git merge-base --is-ancestor ${branch} HEAD && git branch -d ${branch}
done

git branch --no-color 2>/dev/null?
নোটার

5
এটি অবশ্যই উন্নতি আপনার সবসময় * ফিল্টার আউট করার প্রয়োজনের সমস্যা হবে এবং যদি কেউ এটিকে আলাদা করে না ফেলে তবে এটি মজাদার বিষয়গুলি করে। যদিও প্রধান সমস্যাটি git branchচীনামাটির বাসন কমান্ড, এবং গিটারের ভবিষ্যতের সংস্করণে আউটপুট পরিবর্তিত হবে না এমন কোনও গ্যারান্টি নেই।
অ্যান্ড্রু সি

ধন্যবাদ @ অ্যান্ড্রুসি - এটি রহস্যজনক "শাখা খুঁজে পাওয়া যায়নি" ত্রুটি সম্পর্কে উভয়ই প্রশ্নের উত্তর এবং আরও উপযুক্ত কমান্ড ব্যবহার করে একটি কার্যকরী সমাধান সরবরাহ করে! 👍
জেসন

2
কীভাবে 'চীনামাটির বাসন' এবং 'নন-পোরস্লেইন' জিআইটি কমান্ড সনাক্ত করা যায়?
GoZoner

1
সম্ভবত 'ডিভ' এবং 'মাস্টার' কে ডিফল্টরূপে বাদ দেওয়ার জন্য কোনও দরকারী বর্ধন হবে?
পান্ডাওড

65

সমস্ত শাখাগুলি মুছে ফেলার সহজ উপায় কিন্তু অন্যকে "বিকাশ" এবং "মাস্টার" এর মতো রাখা নিম্নরূপ:

git branch | grep -v "develop" | grep -v "master" | xargs git branch -D

খুব দরকারী !


8
আপনি একটি যুগের পুরাতন থ্রেডটি পুনরুত্থিত করেছেন এবং বিদ্যমান একটিটির কাছে কার্যত অভিন্ন উত্তর পোস্ট করেছেন, এটি বগি এবং এটির মধ্যে থাকা সুরক্ষা পরিবর্তনগুলি অনুপস্থিত। এটি একটি ভাল উত্তর নয়।
অ্যান্ড্রু সি

6
এই উত্তরটি গিট শাখা থেকে পাইপিং আউটপুট, এটি পরিবর্তন করে এবং গিট শাখা-ডি তে পাস করার ক্ষেত্রে পরিষ্কার। গড়পড়তা হওয়ার দরকার নেই।
পম

এই সমাধানটি আমার পক্ষে কাজ করেছিল। সমস্ত স্থানীয় শাখা মুছে ফেলা হয়েছে।
প্রাড

1
এটি কোনও শাখায় শব্দ বিকাশ বা 'ডেভলপফেকচার' বা 'মাস্টার_ফাইচার' এর মতো মাস্টার ধারণ করবে না।
django

এটি সেই উত্তর যা আমি খুঁজছিলাম IS
কনরাড জি

62

আপনি বর্তমানে যা যা পরীক্ষা করেছেন তা ব্যতীত প্রতিটি শাখা মুছতে:

for b in `git branch --merged | grep -v \*`; do git branch -D $b; done

আমি আপনার প্রথমে যে শাখাগুলি মুছে ফেলি তা নিশ্চিত করার জন্য প্রথম কয়েকবার পরিবর্তন git branch -D $bকরার পরামর্শ দেব echo $b


1
এই কমান্ডের সাহায্যে আমি error:branch 'a_branch_name' not found.দেখতে পাচ্ছি আপনি কী করতে চাইছেন এবং আমি কমান্ডটি নিয়েই খেলছিলাম তবে কোনও কারণে গিট সরবরাহ করা শাখার নামগুলি পছন্দ করবে বলে মনে হচ্ছে না ...
লথ

Hmmm। সাহায্যের সমস্যা নিবারণ করার জন্য, তা থেকে কিছু উদাহরণ আউটপুট দেখতে দরকারী হবেgit branch --merged
sblom

আমার শাখার নামগুলি ফর্ম্যাটটিতে রয়েছেSTORY-123-Short-Description
লুথ

এবং যখন আপনি দৌড়াবেন git branch --merged, আপনি প্রতিটি লাইনের সাথে একটির সাথে একটি তালিকা পাবেন?
sblom

1
এটি কি আক্ষরিকভাবে বলে error:branch 'a_branch_name' not found.? অথবা এটি git branchউপরে আপনার আউটপুট থেকে কোনও শাখার নাম সম্পর্কে অভিযোগ করে ?
sblom

52

নীচের কমান্ডটি মাস্টার শাখা বাদে সমস্ত স্থানীয় শাখা মুছে ফেলবে।

git branch | grep -v "master" | xargs git branch -D

উপরের আদেশ

  1. সমস্ত শাখা তালিকাভুক্ত
  2. তালিকা থেকে মাস্টার শাখা উপেক্ষা করুন এবং বাকী শাখাগুলি নিন
  3. শাখাটি মুছুন

4
আমি git branch | grep -v "master" | xargs git branch -dপ্রথমে ব্যবহার করব তাই আমি নিরাপদে থাকার জন্য, নিমজ্জিত শাখাগুলি মুছব না। তবে সুন্দর উত্তর!
জোনাস লোমহোল্ড 14

3
এখানে একটি পাওয়ারশেল সংস্করণ রয়েছে,@(git branch | Select-String -Pattern "[^(*?)\s? master]") | ForEach-Object{$_.Line.Trim()} | %{git branch -D $_}
জোনাস লোমহোল্ড

1
@ বাকলাজান এটি আপনার উইন্ডোজ 10 কমান্ড লাইনে কাজ করবে যদি আপনার কোনও সরঞ্জাম ইনস্টল করা থাকে। আপনার কাছে সম্ভবত মিংডাব্লু বা অন্য কোনও জিনিস রয়েছে এবং আপনি এটি জানেন না।
KthProg

42

কেবল একটি নোট, আমি গিট 1.7.10 এ আপগ্রেড করব। আপনি এখানে উত্তর পেতে পারেন যা আপনার সংস্করণে কাজ করবে না। আমার ধারণাটি হ'ল আপনাকে শাখার নামটি উপস্থাপন করতে হবে refs/heads/

সতর্কতা, আপনি যদি আপনার কার্যকরী ফোল্ডার এবং .git ডিরেক্টরিটির একটি অনুলিপি তৈরি করেন তবে নিম্নলিখিতগুলি সাথেই এগিয়ে যান।

আমি মাঝে মাঝে কেবল এগিয়ে যাই এবং আমি যে শাখাগুলি থেকে সরাসরি চাই না তা মুছুন .git/refs/heads। এই সমস্ত শাখা পাঠ্য ফাইল যা তারা প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিতে 40 অক্ষর sha-1 ধারণ করে। আপনার .git/configযদি কারও জন্য নির্দিষ্ট ট্র্যাকিং সেটআপ থাকে তবে আপনার কাছে বহিরাগত তথ্য থাকবে । আপনি সেই প্রবেশগুলি ম্যানুয়ালিও মুছতে পারেন।


শেষ পর্যন্ত একটি সহজ এবং বাস্তববাদী বিকল্প। আমি এটি পছন্দ করি: ডি
মেলভিন

2
আপনার কাছে রেফ প্যাক করা থাকলে, বা আপনি কখনও কখনও রিমোট সার্ভার থেকে ক্লোন করলেও এটি কাজ করবে না (যা আপনাকে প্যাক করা ফাইল সরবরাহ করবে)। আপনি যদি রেফ প্যাক করে থাকেন তবে রেফগুলি .git / রেফ / মস্তকগুলিতে সংরক্ষণ করা হবে না, সেগুলি "প্যাকড-রেফস" নামে একটি ফাইলে সংরক্ষণ করা হবে। Git-scm.com/docs/git-pack-refs দেখুন ।
আলেকজান্ডার বার্ড

1
এই মুহুর্তে আপনি যে শাখাটি পরীক্ষা করে
দেখেছেন

@ মোবার্গ ঠিক আগেই একটি প্রতিশ্রুতি চেকআউট করুন, এবং আপনার বিচ্ছিন্ন হেড ঠিক আছে ভাসা।
রোমেনভ্যালেরি

34

নিম্নলিখিত শেল কমান্ড ব্যবহার করে দেখুন:

git branch | grep -v "master" | xargs git branch -D

ব্যাখ্যা:

  • git branch | grep -v "master"কমান্ডের মাধ্যমে সমস্ত শাখা পান
  • xargsকমান্ড সহ প্রতিটি শাখা নির্বাচন করুন
  • Branch এর সাথে শাখা মুছুন xargs git branch -D

3
যদিও এটি একটি সঠিক উত্তর হতে পারে। কী এবং কীভাবে এটি আসল প্রশ্নটি সমাধান করে তার ব্যাখ্যা ছাড়াই কোডের একটি লাইন খুব কার্যকর নয়। আপনার উত্তর বিশদ সরবরাহ করুন।
রায়াননার্ড

28

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

// hard delete

git branch -D $(git branch)

2
এইটিকে .git এ গিয়ে স্টাফ সরিয়ে ফেলার চেয়ে নিরাপদ মনে হয়।
nelsontruran

25

আমি কেবল পাঠ্য সম্পাদক এবং শেল ব্যবহার করা আরও সহজ পেয়েছি।

  1. আদর্শ git checkout <TAB>শেল । সমস্ত স্থানীয় শাখা প্রদর্শন করবে।
  2. এগুলি কোনও পাঠ্য সম্পাদককে অনুলিপি করুন, আপনার রাখা দরকারগুলি মুছে দিন।
  3. ফাঁকা স্থানের সাথে লাইন বিরতি প্রতিস্থাপন করুন। (সাব্লাইমেক্সট এ এটি অত্যন্ত সহজ)
  4. খোলা শেল, টাইপ করুন git branch -D <PASTE THE BRANCHES NAMES HERE>

এটাই.


আমি মনে করি না আপনি যে শাখায় দাঁড়িয়ে আছেন তা আপনি মুছে ফেলতে পারবেন।
দং থাং

@ ডং এর সেই শাখার পাশে একটি * রয়েছে যাতে আপনি এটি অনুলিপি করা তালিকা থেকে সরিয়ে ফেলুন!
মেলানিয়া

12

আমি একই ধরণের পরিস্থিতি পেয়েছি এবং সম্প্রতি নিম্নলিখিত কমান্ডটি দরকারী বলে মনে করেছি।

git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep>/) printf "%s", $0 }'`

আপনি যদি একাধিক শাখা রাখতে চান তবে

git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep1>|<Branch_You_Want_to_Keep2>/) printf "%s", $0 }'`

আশা করি এটি কাউকে সাহায্য করবে


1
এটির কাজটি করার জন্য খুব সুন্দর তবে আমার ব্যাকটিকসের প্রয়োজন ছিল - git branch -D `git branch | awk '{ if ($0 !~ /master/) printf "%s", $0 }'` আসলে আমার মনে হয় আপনি এগুলি মূলত পেয়েছিলেন তবে তারা এসও ফর্ম্যাটিংয়ে হারিয়ে গেছে।
তাসিনারি

10

উইন্ডোজ কমান্ড লাইন থেকে, বর্তমান চেক আউট ব্রাঞ্চটি ব্যবহার করে সমস্ত মুছুন:

for /f "tokens=*" %f in ('git branch ^| find /v "*"') do git branch -D %f

7

আপনার যদি গিটের মধ্যে দিয়ে যাওয়ার প্রয়োজন না হয় তবে আপনি নিজে .git / রেফারেন্স / হেড ম্যানুয়ালি বা প্রোগ্রামগতভাবে মুছতে পারেন । নীচে বাশের অধীনে সর্বনিম্ন টুইটের সাথে কাজ করা উচিত:

shopt -s extglob
rm -rf .git/refs/heads/!(master)

এটি আপনার মাস্টার শাখা ব্যতীত প্রতিটি স্থানীয় শাখা মুছে ফেলবে। যেহেতু আপনার উজানের শাখাগুলি .git / রেফার্স / রিমোটগুলির অধীনে সঞ্চিত , সেগুলি থাকবে।

আপনি যদি ব্যাশ ব্যবহার না করে থাকেন বা একসাথে প্রচুর গিট সংগ্রহস্থল পুনর্বার করতে চান তবে আপনি জিএনইউ অনুসন্ধানের সাথে অনুরূপ কিছু করতে পারেন:

find . \
    -path remotes -path logs -prune -o \
    -wholename \*.git/refs/heads/\* \! -name master -print0 |
xargs -0 rm -rf

সমাধানটি সম্ভবত আরও বহনযোগ্য, তবে ছাঁটাই পথ এবং ফাইলের নামগুলি জটিল এবং সম্ভবত আরও ত্রুটি-প্রবণ।


কুল। ভিজ্যুয়াল মুছুন :)
স্যান্ডেলন

5

কোনও উত্তরই আমার চাহিদা পুরোপুরি সন্তুষ্ট করে না, তাই আমরা এখানে যাচ্ছি:

git branch --merged | grep -E "(feature|bugfix|hotfix)/" | xargs git branch -D && git remote prune origin

এই সমস্ত স্থানীয় শাখা যা একত্রিত হয়ে যায় এবং দিয়ে শুরু মুছে ফেলবে feature/, bugfix/অথবা hotfix/। এরপরে উজানের দূরবর্তীorigin আপস্ট्रीम ছাঁটাই করা হয় (আপনাকে একটি পাসওয়ার্ড দিতে হবে)।

গিট 1.9.5 এ কাজ করে।


5

এখানে বেশ কয়েকটি উত্তরের সংমিশ্রণের ভিত্তিতে - আপনি যদি রিমোটে থাকা সমস্ত শাখা রাখতে চান তবে বাকীগুলি মুছতে চান , তবে নিম্নলিখিত অনেলনারের কৌশলটি করতে হবে:

git for-each-ref --format '%(refname:short)' refs/heads | grep -Ev `git ls-remote --quiet --heads origin | awk '{print substr($2, 12)}'| paste -sd "|" -` | xargs git branch -D

3

যদিও এটি কোনও কমান্ড লাইন সমাধান নয়, আমি অবাক হয়েছি গিট জিইউআই এখনও প্রস্তাবিত হয়নি।

আমি কমান্ড লাইনটি সময়টি 99% ব্যবহার করি তবে এই ক্ষেত্রে এটি খুব দূরে হয় (সুতরাং মূল প্রশ্ন), বা আপনি কিছু জানেন না যে আপনি কী মুছতে চলেছেন যখন কিছু দীর্ঘ, তবে চতুর শেল ম্যানিপুলেশন অবলম্বন করে।

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

UI থেকে শাখায় যান -> মুছুন এবং Ctrl + আপনি যে শাখাগুলি মুছতে চান তাতে ক্লিক করুন যাতে সেগুলি হাইলাইট হয়। আপনি যদি নিশ্চিত হতে চান যে সেগুলি শাখায় মার্জ করা হয়েছে (যেমন dev), কেবল মুছুন এর অধীনে স্থানীয় শাখায় সেট করা থাকে dev। অন্যথায়, এই চেক উপেক্ষা করার জন্য এটি সর্বদা সেট করুন ।

গিটইউআই: স্থানীয় শাখাগুলি মুছুন


1

পাওয়ারশেলের জন্য, এটি কাজ করবে:

git branch --format '%(refname:lstrip=2)' --merged `
    | Where-Object { $_ -ne 'master' } `
    | ForEach-Object { git branch -d $_ }

0

নিম্নলিখিত স্ক্রিপ্টটি শাখাগুলি মুছে ফেলে। এটি ব্যবহার করুন এবং এটি আপনার নিজের ঝুঁকিতে ইত্যাদি সংশোধন করুন ইত্যাদি etc.

এই প্রশ্নের অন্যান্য উত্তরের ভিত্তিতে আমি নিজের জন্য একটি দ্রুত বাশ স্ক্রিপ্ট লিখে শেষ করেছি। আমি এটিকে "গিটবিডি" (গিট শাখা-ডি) বলেছি তবে আপনি যদি এটি ব্যবহার করেন তবে আপনি যা চান তার নাম পরিবর্তন করতে পারেন।

gitbd() {
if [ $# -le 1 ]
  then
    local branches_to_delete=`git for-each-ref --format '%(refname:short)' refs/heads/ | grep "$1"`
    printf "Matching branches:\n\n$branches_to_delete\n\nDelete? [Y/n] "
    read -n 1 -r # Immediately continue after getting 1 keypress
    echo # Move to a new line
    if [[ ! $REPLY == 'N' && ! $REPLY == 'n' ]]
      then
        echo $branches_to_delete | xargs git branch -D
    fi
else
  echo "This command takes one arg (match pattern) or no args (match all)"
fi
}

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

এটি একধরনের বোবা - যদি কোনও প্যাটার্নের সাথে মেলে এমন কোনও শাখা না থাকে তবে এটি উপলব্ধি করে না।

একটি উদাহরণ আউটপুট রান:

$ gitbd test
Matching branches:

dummy+test1
dummy+test2
dummy+test3

Delete? [Y/n] 

0

আমি বাদে সমস্ত স্থানীয় শাখা অপসারণের জন্য একটি শেল স্ক্রিপ্ট লিখেছিলাম develop

branches=$(git branch | tr -d " *")
output=""
for branch in $branches 
do
  if [[ $branch != "develop" ]]; then
    output="$output $branch"
  fi
done
git branch -d $output

0

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

প্রথমে git branchসমস্ত স্থানীয় শাখা তালিকাভুক্ত করবে।

ইউনিক্স কমান্ড চালিয়ে শাখার নামগুলির কলামটি ফাইলের একক সারিতে স্থানান্তরিত করা
git branch > sample.txt
এটি নমুনা.টিএসটি ফাইলগুলিতে এটি সংরক্ষণ করবে । এবং চালান
awk 'BEGIN { ORS = " " } { print }' sample.txt
শেল কমান্ড । এটি কলামটিকে সারিতে রূপান্তরিত করবে এবং একক সারিতে শাখার নামের তালিকাটি অনুলিপি করবে।

এবং তারপর চালান
git branch -D branch_name(s)
এটি স্থানীয় উপস্থিত সমস্ত তালিকাভুক্ত শাখা মুছে ফেলবে


0

সর্বাধিক বাস্তব উপায়: নিশ্চিত হয়ে নিন যে আপনার masterঅনিয়ন্ত্রিত কোনও কাজ নেই, প্রয়োজন হলে প্রতিশ্রুতি / চাপ দিন, ভাণ্ডারের একটি নতুন কপি ক্লোন করুন এবং পুরানোটি মুছুন।



0

আমার বাক্সে গ্রেপ বা অন্যান্য ইউনিক্স নেই তবে এটি ভিএসকোডের টার্মিনাল থেকে কাজ করেছে:

git branch -d $(git branch).trim()

আমি ছোট হাতের ডি ব্যবহার করি যাতে এটি নিমজ্জিত শাখাগুলি মুছে না won't

আমি এটি করার সময়ও মাস্টার ছিলাম, * masterসুতরাং এটি বিদ্যমান নেই তাই এটি মাস্টারকে মুছে ফেলার চেষ্টা করেনি।


নিশ্চিত করা: এটি চালু না থাকলে master, এই আদেশটি মুছে ফেলবে master
ব্রেট রাউবেরি

-1

আপনি প্রথমে এটি নিশ্চিত করে নিন

git fetch

আপনার কাছে সমস্ত প্রত্যন্ত শাখার তথ্য হয়ে গেলে, মাস্টার ব্যতীত প্রতিটি শাখা অপসারণ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন

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