একত্রীকরণ করা সমস্ত গিট শাখা আমি কীভাবে মুছতে পারি?


1932

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


46
কিছুটা সুনির্দিষ্টভাবে নির্দিষ্ট হওয়ার জন্য git branch -Dকোনও শাখাকে মুছে ফেলা হয়েছে কিনা তা মুছে ফেলা হয়েছে।
ফিল্ট

12
আপনি যদি আপনার রেপোর 'শাখা' বিভাগে যান (যেমন: github.com/<username>/<repo_name>/ शाखाগুলি ) তবে আপনি সরাসরি গিটহাব থেকে এটি করতে পারেন । আপনার সমস্ত শাখার একটি তালিকা থাকতে হবে, পাশে একটি লাল ট্র্যাশকেন আইকন রয়েছে যা নির্বাচিত শাখাটি মুছে ফেলবে। টার্মিনালে এটি করার চেয়ে অনেক দ্রুত! masterপ্রতিটি শাখার কতদূর / পিছনে রয়েছে তাও প্রদর্শন করবে । যাইহোক, আপনার স্থানীয় ক্লায়েন্ট এখনও চালানো হলে পুরানো শাখা তালিকাবদ্ধ করবে git branch -a; ব্যবহার git fetch --pruneতাদের সরিয়ে (প্রতি যেমন এই উত্তর )।
ব্যবহারকারীর 35359531

3
নিরাপত্তা চেক সঙ্গে এবং "নিরাপদ শাখা" প্রাক কনফিগার - স্ক্রিপ্ট স্থানীয় অথবা দূরবর্তী অবস্থানে এই কাজ করতে: github.com/fatso83/dotfiles/tree/master/utils/... git delete-merged --doit origin বাgit delete-merged --doit --local
oligofren থেকে

আপনি মার্জ করা শাখাগুলি স্বয়ংক্রিয়ভাবে মুছতে এই অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন ।
সেবাস ভ্যান বক্সেল

rm -fr work && git clone http://example.com/work.gitবছরের পর বছর ধরে গিটের সাথে আচার থেকে বেরিয়ে আসার সহজতম উপায় হয়ে উঠেছে।
বিক্রিয়াকারী

উত্তর:


3113

হালনাগাদ:

মাস্টার এবং দেবের মতো বাদ দিতে আপনি অন্যান্য শাখা যুক্ত করতে পারেন যদি আপনার কর্মপ্রবাহে সম্ভাব্য পূর্বপুরুষ হিসাবে থাকে। সাধারণত আমি একটি "স্প্রিন্ট-স্টার্ট" ট্যাগ বন্ধ করে দিয়েছি এবং মাস্টার, দেব এবং কিএ পূর্বপুরুষ নয়।

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

git branch --merged

আপনি মুছতে চান না এমন কয়েকটি শাখা দেখতে পাবেন। আমরা গুরুত্বপূর্ণ শাখাগুলি এড়াতে কয়েকটি যুক্তি যুক্ত করতে পারি যা আমরা মাস্টার বা বিকাশের মতো মুছতে চাই না। নিম্নলিখিত কমান্ডটি মাস্টার শাখা এবং এতে যা কিছু আছে তা এড়িয়ে যাবে।

git branch --merged| egrep -v "(^\*|master|dev)"

আপনি যদি এড়াতে চান, আপনি এটি নীচের মত egrep কমান্ডে যুক্ত করতে পারেন। শাখাটি skip_branch_nameমোছা হবে না।

git branch --merged| egrep -v "(^\*|master|dev|skip_branch_name)"

ইতিমধ্যে চেক আউট শাখায় মার্জ হওয়া সমস্ত স্থানীয় শাখা মুছতে:

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

আপনি দেখতে পাচ্ছেন যে পূর্বপুরুষ হওয়ার কারণে মাস্টার এবং দেব বাদ পড়েছেন।


আপনি এতে একীভূত স্থানীয় শাখা মুছতে পারেন:

git branch -d branchname

যদি এটি মার্জ না করা হয় তবে ব্যবহার করুন:

git branch -D branchname

এটি দূরবর্তী ব্যবহার থেকে মুছতে:

git push --delete origin branchname

git push origin :branchname    # for really old git

একবার আপনি রিমোট থেকে শাখাটি মুছে ফেললে, আপনি এর সাথে দূরবর্তী ট্র্যাকিং শাখাগুলি থেকে মুক্তি পেতে ছাঁটাই করতে পারেন:

git remote prune origin

বা পৃথক দূরবর্তী ট্র্যাকিং শাখাগুলি ছাঁটাই করুন, অন্য উত্তরটি হিসাবে, এর সাথে:

git branch -dr branchname

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


46
সতর্কতা: আপনি যদি কেবল একটি শাখা তৈরি করেন তবে এটিও এটি মুছবে। আপনি সর্বাধিক সর্বাধিক কমান্ড চালানোর আগে তালিকায় একটি নতুন তৈরি শাখা না থাকার বিষয়টি নিশ্চিত করুন।
গ্যারি হরান

153
সতর্কতার বিরোধিতা করুন: রিফ্লগ আপনার বেকনকে সংরক্ষণ করবে। সুতরাং চিন্তা করবেন না।
অ্যাডাম ডাইমিত্রুক

33
মনে রাখবেন যে প্রথম কমান্ডটি কেবল স্থানীয় শাখাগুলি মুছে ফেলে, তাই এটি 'বিপজ্জনক' কিছু না বলে কিছু উল্লেখ করেছেন।
ifightcrime

79
পাওয়ারশেল বৈকল্পিক, যাতে আমি পরের বার উত্তরটি git branch --merged | %{$_.trim()} | ?{$_ -notmatch 'develop' -and $_ -notmatch 'master'} | %{git branch -d $_}
গুগল

23
এটি fatal: branch name requiredমুছে ফেলা উচিত এমন কোনও শাখা না থাকলে এটি একটি ত্রুটি তৈরি করে । এড়াতে আপনি পাস -rকরতে xargsপারেন যাতে git branch -dস্টিডিন খালি থাকলে এটি চলবে না । (ম্যান পৃষ্ঠা অনুসারে এটি একটি জিএনইউ এক্সারগ্স এক্সটেনশন)।
মারিয়াস গেডমিনাস

455

ইতিমধ্যে মার্জ করা দূরবর্তী সমস্ত শাখা মুছতে:

git branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin

গিতের আরও সাম্প্রতিক সংস্করণগুলিতে

git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin

আপডেট (@ অলিভার দ্বারা; যেহেতু মন্তব্যে ফিট করে না, তবে ইতিমধ্যে যথেষ্ট উত্তর রয়েছে) : আপনি যদি শাখা এবিসি তে থাকেন git branch -r --mergedতবে শাখা নির্দিষ্ট না হওয়ার কারণে এবিসির ফলাফলগুলিতে উপস্থিত হবে , সুতরাং শাখাটি বর্তমান শাখায় ডিফল্ট হবে এবং একটি শাখা থাকবে সর্বদা নিজেকে একীভূত হিসাবে যোগ্য করে তোলে (কারণ একটি শাখা এবং নিজের মধ্যে কোনও পার্থক্য নেই!)।

সুতরাং হয় শাখা নির্দিষ্ট:

git branch -r --merged master | grep -v master ...

বা প্রথম চেকআউট মাস্টার:

git checkout master | git branch -r --merged | grep -v ...

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

41
আমি যোগ করতে ছিল | grep originপরে grep -v masterউৎপত্তি অন্যান্য রিমোটের শাখা ঠেলাঠেলি প্রতিরোধ। git branch -r --merged | grep -v master | grep origin | sed 's/origin\//:/' | xargs -n 1 echo
L0LN1NJ4

9
আমি developশাখা বাদ দিতে কিছুটা পরিবর্তন করেছি। git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///' | xargs -n 1 git push --delete origin। এখন এটি আমার ওরফে পরিণত হয়েছে।
শরৎ

8
আমি যা পড়েছি এটি সবচেয়ে সেরা উত্তরটি কী হয়ে গেছে, এটি -rযুক্তি, যা আমি অন্য কোথাও উল্লেখ করেছি seen এটি কেবলমাত্র স্থানীয় শাখাগুলি কিছু বাড়ির রক্ষণাবেক্ষণ করা মূল্যবান বলে বিবেচিত হয়। তবে রিমোটগুলিও আবর্জনায় পূর্ণ।
Asbjørn Ulsberg

19
সাবধানতা - সবেমাত্র উপলব্ধি: এটি স্পষ্টতই শাখাগুলিকে বর্তমান শাখায় একীভূত করবে , মাস্টার নয়, সুতরাং আপনি যদি myFeatureBranchএটির উপরে থাকেন তবে মুছা হবে origin/myFeatureBranch। সম্ভবত এটি git checkout masterপ্রথমে সেরা ।
jakub.g

190

আদমের উত্তরটি একটু বাড়িয়ে দেওয়া:

এটি চালিয়ে আপনার গিট কনফিগারেশনে যুক্ত করুন git config -e --global

[alias]
    cleanup = "!git branch --merged | grep  -v '\\*\\|master\\|develop' | xargs -n 1 git branch -d"

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


11
প্রথম কমান্ডটি হওয়া উচিত নয়: git branch --merged masterযেহেতু আপনি এখন মাস্টার হিসাবে একীভূত হয়েছে তা দেখতে চান, বর্তমানে শাখাটি পরীক্ষা করা হয়নি?
জো ফিলিপস

@JoePhilllips কিছু মানুষ প্রধান শাখা না মাস্টার হয়েছে কিন্তু এর পরিবর্তে developবা devএবং যে ক্ষেত্রে কমান্ড ব্যর্থ হয়ে যাবে fatal: malformed object nameএটা একটি জেনেরিক কমান্ড না থাকাই ভাল ছিল এবং আপনি দায়িত্ব এটি চালানোর জন্য আছে
smohamed

1
@ জোফিল্লিপস এই উত্তরটির মূল বিষয়টি হ'ল অ্যাডামের উত্তর (এই প্রশ্নের শীর্ষের উত্তর) সহায়ক গিট ওরফেতে প্যাকেজ করা। অ্যাডামের উত্তরে আপনি যা বলছেন তা তেমন নেই এবং অনেক লোক এটি দরকারী বলে খুঁজে পেয়েছেন তাই আমি আমার পরিবর্তন না করার দিকে ঝুঁকতে চাই। আপনি যদি এ বিষয়ে
দৃ strongly়তা

13
যুক্ত -rকরা xargsঅযৌক্তিক ত্রুটিগুলি রোধ করবে ( branch name required) এই উরফটি একাধিক বার চালানোর সময় বা যখন কোনও শাখা মুছতে হবে না। আমার cleanup = "!git branch --merged | grep -v -P '^\\*|master|develop' | xargs -n1 -r git branch -d"
উপন্যাসটি

1
বর্তমান কমান্ড মাস্টার ফিল্টার করে এবং শাখাগুলি বিকাশ করে না
অ্যান্ড্রি এফ।

83

এটি মাস্টার ব্যতীত সমস্ত মার্জ করা শাখাগুলি মুছতেও কাজ করে।

git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d

3
এখন এটি এতে থাকা কোনও শাখা মুছে ফেলবে না mastergrep -v ^master$মাঝের জন্য চেষ্টা করুন ।
wchargin

| grep -v '^\*'আপনি যদি মাস্টার না হন
svassr

5
এটি দুর্দান্ত, ধন্যবাদ! এটি ব্যবহার করার জন্য যে কোনও একজনের জন্য সতর্কতা: নোট করুন যে দুটি স্পেস রয়েছে grep -v '^ master$'। আপনি যদি এটি নিজের মধ্যে টাইপ করেন এবং একটি মিস করেন masterতবে আপনি যদি তা না রাখেন তবে মুছে ফেলবেন ।
স্টাইজার

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

79

আপনি বাদ দেওয়ার চাইবেন master& developঐ কমান্ড ডাল।

স্থানীয় গিট পরিষ্কার:

git branch --merged | grep -v '\*\|master\|develop' | xargs -n 1 git branch -d

রিমোট গিট পরিষ্কার:

git branch -r --merged | grep -v '\*\|master\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin

দূরবর্তী শাখাগুলির স্থানীয় রেজিস্ট্রি সিঙ্ক করুন:

git fetch -p

3
রিমোট সংস্করণটির জন্যও +1 (তবে আমাদের রিমোট - প্রিন রয়েছে বলে কম প্রয়োজন)। এছাড়াও লক্ষণীয় যে থোজে পুরানো গিট সংস্করণ নিয়ে কাজ করবে না
মলকো

4
git config --global --add fetch.prune trueআনতে বা টানতে স্বয়ংক্রিয়ভাবে ছাঁটাই করতে।
T3rm1

1
মনে মনে, ছাঁটাই দূরবর্তী ক্লিয়ার মতো নয়। রিমোট ক্লিয়ারটি আসলে আপনার বর্তমান শাখার সাথে সম্পূর্ণ মিশ্রিত দূরবর্তী শাখাগুলি মুছে দেয়। ছাঁটাই কেবল ইতিমধ্যে মুছে ফেলা দূরবর্তী শাখাগুলির আপনার স্থানীয় রেজিস্ট্রি পরিষ্কার করে।
গিডো বোম্যান

শব্দটি সম্পূর্ণরূপে কিছুটা বিভ্রান্তিমূলক, কারণ একটি শাখাটি মার্জ হওয়ার আগে বিবেচিত হবে, যখন এটি পূর্বে একীকরণ করা হয়েছিল, তবে মার্জ হওয়ার পরে নতুন প্রতিশ্রুতি রয়েছে, যা মার্জ হয়নি।
scones

সমস্ত কলে রিমোটগুলি একটি কলের মুছতে, আমি এটি ব্যবহার করেছি:git branch -r --merged | grep -v '\*\|master\|develop' | grep '^\s*origin/' | sed 's/origin\///' | tr "\n" " " | xargs git push --delete origin
জিপিহেমসলে

48

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

function Remove-MergedBranches
{
  git branch --merged |
    ForEach-Object { $_.Trim() } |
    Where-Object {$_ -NotMatch "^\*"} |
    Where-Object {-not ( $_ -Like "*master" )} |
    ForEach-Object { git branch -d $_ }
}

13
কৌতূহলের জন্য, এটি সংক্ষিপ্ত করা যেতে পারে git branch --merged | ?{-not ($_ -like "*master")} | %{git branch -d $_.trim()}
আইইন বলার্ড

5
@ আইইনব্যালার্ড অবশ্যই, আমি এলিয়াস ব্যবহার করতে পারতাম। আপনি যখন পঠনযোগ্যতা সর্বাধিক করতে চান তখন এটির প্রস্তাব দেওয়া হয় না। github.com/darkoperator/PSStyleGuide/blob/master/English.md
ক্লাস মেলবোর্ন

1
নিশ্চিত করুন। আমি আপনার উত্তরটি খুব সহায়ক বলে খুঁজে পেয়েছি :-) তবে কখনও কখনও দীর্ঘ-রূপের পাওয়ারশেল সিনট্যাক্সগুলি ব্লকগুলিতে কী চলছে সেভাবেই পায়। তবে প্রাথমিকভাবে, আমি এমন কিছু সামনে রেখেছিলাম যা আপনি অনুলিপি / পেস্ট বা এক-অফ হিসাবে টাইপ করতে পারেন। আবার ধন্যবাদ.
আয়ান বলার্ড

4
: এখানে Windows এর জন্য একটি এক মাছ ধরার নৌকা cmd শেল যে সংরক্ষণ মাস্টার এবং আপনার বর্তমান শাখা এর for /f "usebackq" %B in (``git branch --merged^|findstr /v /c:"* " /c:"master"``) do @git branch -d %B(দীর্ঘশ্বাস, একক সঙ্গে ডবল backquotes প্রতিস্থাপন আমি নিশ্চিত কিভাবে আক্ষরিক যে backquotes রয়েছে ফরম্যাট করতে নই)
Yoyo

42

আমি বহু বছর ধরে আদমের উত্তর ব্যবহার করেছি। এটি বলেছিল যে কিছু কিছু ক্ষেত্রে এটি প্রত্যাশা মতো আচরণ করা হয়নি:

  1. শাখা যে অন্তর্ভুক্ত শব্দ "মাস্টার" উপেক্ষা করা হয়েছে, যেমন "notmaster" বা "উদ্ধত", বরং শুধুমাত্র মাস্টার শাখা চেয়ে
  2. শাখা যে অন্তর্ভুক্ত"দেব" শব্দটি করে উপেক্ষা করা হয়েছিল, যেমন "দেব-পরীক্ষা", বরং কেবলমাত্র দেব শাখা
  3. বর্তমানের শিরোনাম থেকে পাওয়া যায় এমন শাখাগুলি মুছে ফেলা হচ্ছে শাখার হচ্ছে (এটি অবশ্যই প্রয়োজনীয় নয়)
  4. বিচ্ছিন্ন হেড অবস্থায়, বর্তমান কমিট থেকে পৌঁছনীয় প্রতিটি শাখা মুছে ফেলা

1 এবং 2 ঠিক রেগেক্সে পরিবর্তনের সাথে সম্বোধনের পক্ষে সোজা ছিল। 3 আপনি যা চান তার প্রসঙ্গে (যেমন কেবলমাত্র সেই শাখাগুলি মুছুন যা মাস্টারে বা আপনার বর্তমান শাখার বিপরীতে বিভক্ত হয়নি)। 4 টি বিপর্যয়কর হওয়ার সম্ভাবনা রয়েছে (যদিও এর সাথে পুনরুদ্ধারযোগ্য git reflog), যদি আপনি অজান্তেই এটিকে পৃথক হেড অবস্থায় চালিয়ে যান।

অবশেষে, আমি এটি সবার কাছে চেয়েছিলাম যে ওয়ান লাইনারে থাকতে হবে যার জন্য আলাদা (বাশ | রুবি | পাইথন) স্ক্রিপ্টের দরকার নেই।

টি এল; ডিআর

একটি গিট ওরফে "সুইপ" তৈরি করুন যা একটি -fflag চ্ছিক পতাকা গ্রহণ করে :

git config --global alias.sweep '!git branch --merged $([[ $1 != "-f" ]] \
&& git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" \
| xargs git branch -d'

এবং এর সাথে অনুরোধ করুন:

git sweep

বা:

git sweep -f

দীর্ঘ, বিস্তারিত উত্তর

কিছু শাখাগুলির সাথে গিট রেপো তৈরি করা আমার পক্ষে সবচেয়ে সহজ ছিল এবং সঠিক আচরণ পরীক্ষা করার জন্য প্রতিশ্রুতিবদ্ধ:

একক প্রতিশ্রুতি দিয়ে একটি নতুন গিট রেপো তৈরি করুন

mkdir sweep-test && cd sweep-test && git init
echo "hello" > hello
git add . && git commit -am "initial commit"

কিছু নতুন শাখা তৈরি করুন

git branch foo && git branch bar && git branch develop && git branch notmaster && git branch masterful
git branch --list
  bar
  develop
  foo
* master
  masterful
  notmaster

পছন্দসই আচরণ: বাদে সমস্ত মার্জ করা শাখাগুলি নির্বাচন করুন: মাস্টার, বিকাশ বা বর্তমান

মূল রেজেক্সটি "মাস্টারফুল" এবং "নোটমাস্টার" শাখাগুলি মিস করে:

git checkout foo
git branch --merged | egrep -v "(^\*|master|dev)"
  bar

আপডেট হওয়া রেজেক্সের সাথে (যা এখন "দেব" এর পরিবর্তে "বিকাশ" বাদ দেয়):

git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
bar
masterful
notmaster

শাখা ফুতে স্যুইচ করুন, একটি নতুন অঙ্গীকারবদ্ধ করুন, তারপরে foo এর উপর ভিত্তি করে একটি নতুন শাখা, ফুবার চেকআউট করুন:

echo "foo" > foo
git add . && git commit -am "foo"
git checkout -b foobar
echo "foobar" > foobar
git add . && git commit -am "foobar"

আমার বর্তমান শাখাটি ফুবার, এবং আমি যে শাখাগুলি মুছতে চাইছি তার তালিকা করতে যদি আমি উপরের কমান্ডটি পুনরায় চালিত করি, তবে শাখা "ফু" মাস্টার হিসাবে একীভূত না হওয়া সত্ত্বেও অন্তর্ভুক্ত থাকবে:

git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
  bar
  foo
  masterful
  notmaster

তবে, আমি যদি মাস্টারে একই কমান্ডটি চালাই তবে শাখা "foo" অন্তর্ভুক্ত নয়:

git checkout master && git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
  bar
  masterful
  notmaster

এবং এটি কেবলমাত্র কারণ git branch --mergedঅন্যথায় সুনির্দিষ্ট না থাকলে বর্তমান শাখার প্রধানের ডিফল্ট। কমপক্ষে আমার কর্মপ্রবাহের জন্য, আমি স্থানীয় শাখাগুলি মাস্টারে একীভূত না করা চাই না, তাই আমি নিম্নলিখিত রূপটি পছন্দ করি:

git checkout foobar
git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)"
  bar
  masterful
  notmaster

পৃথকভাবে হেডের অবস্থা

ডিফল্ট আচরণের উপর নির্ভর করা git branch --mergedপৃথক হেড রাজ্যে আরও তাত্পর্যপূর্ণ পরিণতি ঘটায়:

git checkout foobar
git checkout HEAD~0
git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
  bar
  foo
  foobar
  masterful
  notmaster

এটি আমার কেবল যে শাখাটি ছিল, মুছে ফেলা হবে "ফুব" পাশাপাশি "ফু", যা সম্ভবত অবশ্যই পছন্দসই ফলাফল নয়। আমাদের সংশোধিত আদেশ সহ, যদিও:

git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)"
  bar
  masterful
  notmaster

আসল মোছা সহ এক লাইন

git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" | xargs git branch -d

সমস্ত একটি গিট ওরফে "সুইপ" এ আবৃত:

git config --global alias.sweep '!git branch --merged $([[ $1 != "-f" ]] \
&& git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" \
| xargs git branch -d'

উপনাম একটি alচ্ছিক -fপতাকা গ্রহণ করে । ডিফল্ট আচরণটি কেবল সেই শাখাগুলি মুছে ফেলা হয় যা মাস্টারে মার্জ করা হয়েছিল, তবে -fপতাকাটি বর্তমান শাখায় মার্জ করা শাখাগুলি মুছবে।

git sweep
Deleted branch bar (was 9a56952).
Deleted branch masterful (was 9a56952).
Deleted branch notmaster (was 9a56952).
git sweep -f
Deleted branch foo (was 2cea1ab).

কেন আপনি একটি ফাংশন তৈরি করতে হবে? git configপারমাণবিক না ?
ভাসিলিনভিকভ


1
কিন্তু কিভাবে এটি সাহায্য করে? আমি অভিব্যক্তি শুরু মানে !f(){ git branch ...। এটি একটি ফাংশন ঘোষণা, তাই না? কেন সরাসরি শুরু করবেন না git branch ...?
ভ্যাসিলিভিনিকভ

1
তুমি একেবারেই সঠিক. সেই অনুসারে আমার উত্তর সম্পাদনা করেছেন। পয়েন্টারের জন্য ধন্যবাদ!
এডিগুলি

নিম্নলিখিতগুলি কি অ-বাহিনী-মোডের মতো একই কাজ করবে না? git checkout master && git branch -d `git branch --merged` && git checkout - এটি মুছতে developপারে তা বাদ দিয়ে তবে এটি একটি সহজ পদ্ধতির হতে পারে।
গুইডো বোম্যান


18

গিট সংস্করণ 2.5.0 ব্যবহার করে:

git branch -d `git branch --merged`

16
এটি masterশাখা বিটিডব্লু মুছতে পারে !
ওয়াজারি

4
সত্য। আমি কেবল তখনই ব্যবহার করি যখন আমি নিশ্চিত যে আমি চালু আছি master
ড্রটব

11
git branch -d $(git branch --merged | grep -v master)
অ্যালেক্স

1
এটি বিপজ্জনক যদি আপনার প্রবাহ থাকে, কল্পনা করুন আপনার কাছে মাস্টার <- পর্যায় <- দেব। তবুও সহজ সমাধান ইমো
জোসেফ ব্রিগেস

14

আপনি - নিমজ্জিত বিকল্পে প্রতিশ্রুতি যুক্ত করতে পারেন। এইভাবে আপনি কেবল সেই শাখাগুলি মুছে ফেলা নিশ্চিত করতে পারবেন যা মূল / উত্সে মিশে গেছে

নিম্নলিখিত আদেশটি আপনার উত্স থেকে মার্জ করা শাখাগুলি মুছে ফেলবে।

git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 git push origin --delete 

গিট পুশ উত্স প্রতিস্থাপনের পরিবর্তে কোন শাখাগুলি সরানো হবে তা আপনি পরীক্ষা করতে পারেন - প্রতিধ্বনির সাহায্যে মুছে ফেলা

git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 echo

2
আমি পরীক্ষার বিকল্পটি পছন্দ করি
iwin

12

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

#!/usr/bin/env ruby

current_branch = `git symbolic-ref --short HEAD`.chomp
if current_branch != "master"
  if $?.exitstatus == 0
    puts "WARNING: You are on branch #{current_branch}, NOT master."
  else
    puts "WARNING: You are not on a branch"
  end
  puts
end

puts "Fetching merged branches..."
remote_branches= `git branch -r --merged`.
  split("\n").
  map(&:strip).
  reject {|b| b =~ /\/(#{current_branch}|master)/}

local_branches= `git branch --merged`.
  gsub(/^\* /, '').
  split("\n").
  map(&:strip).
  reject {|b| b =~ /(#{current_branch}|master)/}

if remote_branches.empty? && local_branches.empty?
  puts "No existing branches have been merged into #{current_branch}."
else
  puts "This will remove the following branches:"
  puts remote_branches.join("\n")
  puts local_branches.join("\n")
  puts "Proceed?"
  if gets =~ /^y/i
    remote_branches.each do |b|
      remote, branch = b.split(/\//)
      `git push #{remote} :#{branch}`
    end

    # Remove local branches
    `git branch -d #{local_branches.join(' ')}`
  else
    puts "No branches removed."
  end
end

মনে মনে যদি আমি একটু গিট সহায়ক লাইব্রেরির জন্য এই টিডিবিটটি চুরি করি? github.com/yupiq/git-branch-util
লোগান

1
এটির জন্য যান, আমি যদি
কোনওভাবে

@ মিম্রোবিনগুলি লাইনের \/জন্য প্রত্যাখ্যানিত বিবৃতি শুরুর দিকে আপনার অতিরিক্ত রয়েছে remote_branches। এটি কি টাইপো বা এটি কোনও উদ্দেশ্য করে?
জাওয়াদ

@ মিমব্রিনস, ওহ কিছু মনে করবেন না আমি b.split(/\//)এখন লাইনটি দেখছি
জাওয়ওয়াদ

আপনি যদি মূলত এটি করতে চান তবে রুবিয়ের
রমন

11

পাওয়ারশেল কনসোলে মার্জ করা শাখাগুলি কীভাবে মুছবেন

git branch --merged | %{git branch -d $_.Trim()}

আপনি যদি মাস্টার বা অন্য কোনও শাখার নাম বাদ দিতে চান তবে আপনি পাওয়ারশেল সিলেক্ট-স্ট্রিংয়ের সাথে পাইপ করতে পারেন এবং ফলাফলটি এখানে পাস করতে পারেন git branch -d:

git branch -d $(git branch --merged | Select-String -NotMatch "master" | %{$_.ToString().Trim()})

1
উচ্চতর উত্তরগুলি ফিল্টারিং মাস্টার বা অন্যান্য শাখার পরামর্শ দিচ্ছে। যারা পাওয়ারশেলে এটি করতে চাইছেন তাদের জন্য: গিট শাখা - নিমজ্জিত findstr / v "মাস্টার" | % {গিট শাখা
-ড

@ ট্রেডজকো ভাল পয়েন্ট FTR উচ্চতর উত্তর stackoverflow.com/questions/6127328/... - আপনি এই লিঙ্ক দিয়ে আপনার মন্তব্যকে repost পারে এবং আমি তারপর মুছে ফেলতে চাই
রুবেন Bartelink

এটি মুছে ফেলার চেষ্টা করে * master:)
অর্থাৎ

9

কুবুনের জবাব শাখাগুলি মুছে ফেলা বাদ দিয়েছে যার শাখার নামটিতে মাস্টার শব্দ রয়েছে। নিম্নলিখিত তার উত্তরে উন্নতি করে:

git branch -r --merged | grep -v "origin/master$" | sed 's/\s*origin\///' | xargs -n 1 git push --delete origin

অবশ্যই এটি "মাস্টার" শাখা নিজেই মুছবে না :)


8

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

আপনার যদি কোনও শাখাকে মাস্টারের সাথে একীভূত করা হয়েছে কিনা তা জানতে হলে নিম্নলিখিত কমান্ডটি যদি আমার টপিক ব্র্যাঙ্ক একীভূত হয় তবে আউটপুট আসবে না (যেমন আপনি এটি মুছতে পারেন)

$ git rev-list master | grep $(git rev-parse myTopicBranch)

আপনি গিট শাখা কমান্ডটি ব্যবহার করতে পারেন এবং ব্যাশের সমস্ত শাখা বিশ্লেষণ করতে এবং forসমস্ত শাখার উপরে লুপ করতে পারেন। এই লুপটিতে আপনি উপরের কমান্ড দিয়ে চেক করুন যদি আপনি শাখাটি মুছতে পারেন বা না করতে পারেন।


7

git branch --merged | grep -Ev '^(. master|\*)' | xargs -n 1 git branch -d বর্তমান চেক আউট শাখা এবং / অথবা বাদে সমস্ত স্থানীয় শাখা মুছে ফেলবে master

এই আদেশগুলি বোঝার জন্য তাদের জন্য এখানে একটি সহায়ক নিবন্ধটি দেওয়া হয়েছে: গিট ক্লিন: ইতিমধ্যে স্টিভেন হারমানের মার্জ করা শাখাগুলি মুছুন


7

আপনি যদি উইন্ডোজে থাকেন তবে আপনি উইন্ডোজ পাওয়ারশেল বা পাওয়ারশেল 7 টি আউট-গ্রিডভিউয়ের সাথে শাখাগুলির একটি সুন্দর তালিকা রাখতে এবং মাউস দিয়ে নির্বাচন করতে পারেন যা আপনি মুছতে চান:

git branch --format "%(refname:short)" --merged  | Out-GridView -PassThru | % { git branch -d $_ }

এখানে চিত্র বর্ণনা লিখুন ওকে পাওয়ারশেল ক্লিক করার পরে git branch -dকমান্ড এবং মুছতে এই শাখার নামগুলি পাস করবেএখানে চিত্র বর্ণনা লিখুন


6

আপনি git-del-br সরঞ্জাম ব্যবহার করতে পারেন ।

git-del-br -a

আপনি এটি pipব্যবহার করে ইনস্টল করতে পারেন

pip install git-del-br

পিএস: আমি টুলটির লেখক। যে কোনও পরামর্শ / প্রতিক্রিয়া স্বাগত।


1
@ stackoverflow.com/users/100297/martijn-pieters : কেন এই উত্তরটি মুছে ফেলা হয়েছে এবং নিম্নচালিত হয়েছিল?
tusharmakkar08

1
আপনার উত্তর এবং সরঞ্জাম কাজ করে না। আমি এটি কয়েক ঘন্টা ব্যয়। কিছুই নেই।
SpoiledTechie.com

@ স্পিলেডটেকি.কম: আপনি কি বলতে পারবেন ঠিক কোন সমস্যার মুখোমুখি হচ্ছেন? আমি এটি নিয়মিত ব্যবহার করছি।
tusharmakkar08

আপনি যদি এই অফলাইনে নিতে চান তবে আমি একটি স্ক্রিনশট ভাগ করতে পারি? গুগল মেল জিনিস এ spoiledtechie। :)
SpoiledTechie.com

6

দ্রষ্টব্য : আমি পূর্ববর্তী উত্তরগুলি নিয়ে খুশি নই, (সমস্ত সিস্টেমে কাজ করছে না, দূরবর্তী স্থানে কাজ করছে না, - নিমজ্জিত শাখা নির্দিষ্ট করে দিচ্ছে না, সঠিকভাবে ফিল্টার করছে না)। সুতরাং, আমি আমার নিজের উত্তর যুক্ত করব।

দুটি প্রধান মামলা রয়েছে:

স্থানীয়

আপনি করতে চান স্থানীয় শাখা মুছতে যে ইতিমধ্যেই অন্য স্থানীয় শাখা মিশে গিয়ে তৈরি । মোছার সময়, আপনি কিছু গুরুত্বপূর্ণ শাখা রাখতে চান, যেমন মাস্টার, বিকাশ ইত্যাদি

git branch --format "%(refname:short)" --merged master | grep -E -v '^master$|^feature/develop$' | xargs -n 1 git branch -d

দ্রষ্টব্য :

  • git branch output --format ".." হ'ল হোয়াইটস্পেসগুলি ফেলা এবং সঠিক গ্রেপ ম্যাচিংয়ের অনুমতি দেওয়া
  • grep -Eপরিবর্তে ব্যবহৃত হয়egrep , সুতরাং এটি egrep ছাড়াই সিস্টেমেও কাজ করে (যেমন: উইন্ডোগুলির জন্য গিট)।
  • grep -E -v '^master$|^feature/develop$' স্থানীয় শাখাগুলি নির্দিষ্ট করতে হবে যা আমি মুছতে চাই না
  • xargs -n 1 git branch -d: স্থানীয় শাখাগুলি মুছে ফেলা সম্পাদন করুন (এটি দূরবর্তীগুলির পক্ষে কাজ করবে না)
  • অবশ্যই আপনি এখন চেক-আউট শাখাটি মোছার চেষ্টা করলে একটি ত্রুটি পান। সুতরাং, আমি আগেই মাস্টার স্যুইচ করার পরামর্শ দিই।

দূরবর্তী

আপনি করতে চান দূরবর্তী শাখা মুছতে যে ইতিমধ্যেই অন্য দূরবর্তী শাখায় মার্জ । মোছার সময়, আপনি কয়েকটি গুরুত্বপূর্ণ শাখা রাখতে চান, যেমন হেড, মাস্টার, রিলিজ ইত্যাদি

git branch -r --format "%(refname:short)" --merged origin/master | grep -E -v '^*HEAD$|^*/master$|^*release' | cut -d/ -f2- | xargs -n 1 git push --delete origin

দ্রষ্টব্য :

  • রিমোটের জন্য, আমরা -rবিকল্পটি ব্যবহার করি এবং পুরো শাখার নাম সরবরাহ করি :origin/master
  • grep -E -v '^*HEAD$|^*/master$|^*release' আমরা মুছে ফেলতে চাই না এমন প্রত্যন্ত শাখাগুলির সাথে মেলে।
  • cut -d/ -f2-: অন্যথায় git branchকমান্ড দ্বারা মুদ্রিত অপ্রয়োজনীয় 'উত্স /' উপসর্গটি মুছে ফেলুন out
  • xargs -n 1 git push --delete origin : দূরবর্তী শাখা মুছে ফেলা সঞ্চালন।

5

আপনি বর্তমানে যে শাখায় ইতিমধ্যে একত্রীভূত হয়ে থাকা সমস্ত স্থানীয় শাখাটি মুছে ফেলতে চান তবে পূর্বের উত্তরের উপর ভিত্তি করে আমি এটির জন্য একটি নিরাপদ কমান্ড নিয়ে এসেছি:

git branch --merged | grep -v \* | grep -v '^\s*master$' | xargs -t -n 1 git branch -d

এই আদেশটি আপনার বর্তমান শাখা বা আপনার মাস্টার শাখাকে প্রভাবিত করবে না। এটি জার্গসের -t পতাকা ব্যবহার করে এটি করার আগে এটি কী করছে তাও আপনাকে জানায়।



5

আমি গিট-ফ্লো এস্কো নামকরণ প্রকল্পটি ব্যবহার করি, সুতরাং এটি আমার পক্ষে খুব নিরাপদে কাজ করে:

git branch --merged | grep -e "^\s\+\(fix\|feature\)/" | xargs git branch -d

এটি মূলত একীভূত কমিটগুলির সন্ধান করে যা স্ট্রিং fix/বা দিয়ে শুরু হয় feature/


4

নিম্নলিখিত কমান্ড চেষ্টা করুন:

git branch -d $(git branch --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

ব্যবহারের git rev-parseপাবেন বর্তমান শাখার নাম যাতে এটা অগ্রাহ্য হবে। আপনি যদি ত্রুটিটি পেয়ে থাকেন তবে এর অর্থ সরানোর জন্য কোনও স্থানীয় শাখা নেই।

দূরবর্তী শাখাগুলির সাথে এটি করতে ( originআপনার দূরবর্তী নামটি পরিবর্তন করুন), চেষ্টা করুন:

git push origin -vd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD) | cut -d/ -f2)

আপনি একাধিক রিমোট থাকলে, কেবলমাত্র ফিল্টার করতে grep origin |আগে যুক্ত cutকরুন origin

যদি উপরের কমান্ডটি ব্যর্থ হয় তবে প্রথমে মার্জ করা দূরবর্তী ট্র্যাকিং শাখাগুলি মুছতে চেষ্টা করুন:

git branch -rd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

এরপরে git fetchরিমোটটি আবার আগেরটি ব্যবহার করুনgit push -vd কমান্ডটি ।

আপনি যদি এটি প্রায়শই ব্যবহার করেন তবে আপনার ~/.gitconfigফাইলে এলিয়াস যোগ করার বিষয়টি বিবেচনা করুন।

আপনি ভুল করে কিছু শাখা মুছে ফেলার ক্ষেত্রে, git reflogহারিয়ে যাওয়া কমিটগুলি সন্ধান করার জন্য ব্যবহার করুন ।


4

এগুলির কয়েকটি উত্তরের ভিত্তিতে আমি এটির জন্য আমার নিজের বাশ লিপি তৈরি করেছি !

এটি মার্জ করা হয়েছে এমন শাখাগুলি ব্যবহার করে git branch --mergedএবং git branch -dমুছতে এবং মুছার আগে আপনাকে প্রতিটি শাখার জন্য অনুরোধ করে।

merged_branches(){
  local current_branch=$(git rev-parse --abbrev-ref HEAD)
  for branch in $(git branch --merged | cut -c3-)
    do
      echo "Branch $branch is already merged into $current_branch."
      echo "Would you like to delete it? [Y]es/[N]o "
      read REPLY
      if [[ $REPLY =~ ^[Yy] ]]; then
        git branch -d $branch
      fi
  done
}

4

কোয়েরি নীচে আমার জন্য কাজ করে

for branch in  `git branch -r --merged | grep -v '\*\|master\|develop'|awk 'NR > 0 {print$1}'|awk '{gsub(/origin\//, "")}1'`;do git push origin --delete $branch; done

এবং এটি গ্রেপ পাইপে যে কোনও দেওয়া শাখা ফিল্টার করবে।

এইচটিএস ক্লোনার উপর ভাল কাজ করে তবে এসএসএস সংযোগের জন্য তেমন ভাল হয় না।


4

2018.07 হিসাবে

এই যোগ [alias]আপনার বিভাগে ~/.gitconfig:

sweep = !"f() { git branch --merged | egrep -v \"(^\\*|master|dev)\" || true | xargs git branch -d; }; f"

এখন আপনি git sweepপ্রয়োজনীয় পরিষ্কার-পরিচ্ছন্নতা সম্পাদনের জন্য কল করতে পারেন।


আমার জন্য, গিট সুইপ কল করা কেবল সেই শাখাগুলির তালিকা করে যা পরিষ্কার করা উচিত, তবে এটি তাদের সরিয়ে দেয় না
ভিক্টর মোরেস

4

উইন্ডোজে গিট ব্যাশ ইনস্টল করা egrep -v কাজ করবে না

git branch --merged | grep -E -v "(master|test|dev)" | xargs git branch -d

যেখানে grep -E -vসমতুল্যegrep -v

-dইতিমধ্যে মার্জ হওয়া শাখাগুলি -Dসরানোর জন্য বা নিমজ্জিত শাখাগুলি সরাতে ব্যবহার করুন


egrep -v আমার জন্য কাজ করে। আমি যদিও গাইট এক্সটেনশন ইনস্টলার থেকে গিটব্যাশ ব্যবহার করছি
জো ফিলিপস

4

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

আমার bashrcফাইলে আমার নীচে রয়েছে :

function rmb {
  current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
  if [ "$current_branch" != "master" ]; then
    echo "WARNING: You are on branch $current_branch, NOT master."
  fi
  echo "Fetching merged branches..."
  git remote prune origin
  remote_branches=$(git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$")
  local_branches=$(git branch --merged | grep -v 'master$' | grep -v "$current_branch$")
  if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then
    echo "No existing branches have been merged into $current_branch."
  else
    echo "This will remove the following branches:"
    if [ -n "$remote_branches" ]; then
      echo "$remote_branches"
    fi
    if [ -n "$local_branches" ]; then
      echo "$local_branches"
    fi
    read -p "Continue? (y/n): " -n 1 choice
    echo
    if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
      # Remove remote branches
      git push origin `git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$" | sed 's/origin\//:/g' | tr -d '\n'`
      # Remove local branches
      git branch -d `git branch --merged | grep -v 'master$' | grep -v "$current_branch$" | sed 's/origin\///g' | tr -d '\n'`
    else
      echo "No branches removed."
    fi
  fi
}

আসল উত্স

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


3

একটি স্ক্রিপ্ট লিখুন যাতে গিট মাস্টারে একত্রিত হয়ে সমস্ত শাখা পরীক্ষা করে।

তাহলে কর git checkout master

শেষ অবধি, মার্জ করা শাখাগুলি মুছুন।

for k in $(git branch -ra --merged | egrep -v "(^\*|master)"); do
  branchnew=$(echo $k | sed -e "s/origin\///" | sed -e "s/remotes\///")
  echo branch-name: $branchnew
  git checkout $branchnew
done

git checkout master

for k in $(git branch -ra --merged | egrep -v "(^\*|master)"); do
  branchnew=$(echo $k | sed -e "s/origin\///" | sed -e "s/remotes\///")
  echo branch-name: $branchnew
  git push origin --delete $branchnew
done

3

গৃহীত সমাধানটি বেশ ভাল, তবে এটির একটি সমস্যা রয়েছে যে এটি স্থানীয় শাখাগুলি মুছে দেয় যা এখনও একটি রিমোটে একীভূত হয়নি।

আপনি যদি আউটপুট তাকান আপনি কিছু দেখতে পাবেন

$ git branch --merged master -v
  api_doc                  3a05427 [gone] Start of describing the Java API
  bla                      52e080a Update wording.
  branch-1.0               32f1a72 [maven-release-plugin] prepare release 1.0.1
  initial_proposal         6e59fb0 [gone] Original proposal, converted to AsciiDoc.
  issue_248                be2ba3c Skip unit-for-type checking. This needs more work. (#254)
  master                   be2ba3c Skip unit-for-type checking. This needs more work. (#254)

শাখা blaএবং issue_248স্থানীয় শাখা যা নিঃশব্দে মুছে ফেলা হবে।

তবে আপনি শব্দটিও দেখতে পাচ্ছেন [gone], যা এমন শাখাগুলি নির্দেশ করে যা প্রত্যন্ত অঞ্চলে ঠেলে দেওয়া হয়েছিল (যা এখন চলে গেছে) এবং এভাবে শাখাটি মুছে ফেলা যায়।

মূল উত্তরটি এভাবে পরিবর্তন করা যেতে পারে (স্বল্প রেখার দৈর্ঘ্যের জন্য বহুরেখায় বিভক্ত)

git branch --merged master -v | \
     grep  "\\[gone\\]" | \
     sed -e 's/^..//' -e 's/\S* .*//' | \
      xargs git branch -d

এখনও মিশ্রিত শাখা রক্ষা করতে। এটিকে সুরক্ষিত করার জন্য মাস্টারকে গ্রেপিংয়ের প্রয়োজন হয় না, কারণ এটির প্রত্যক্ষ দূরবর্তী রয়েছে এবং এটি যেমন প্রদর্শিত হয় তেমন প্রদর্শিত হয় না।


3

আমার জন্য git branch --mergedগিটিহাব PR এর মাধ্যমে মার্জ করা শাখাগুলি দেখায় না। আমি কারণগুলি সম্পর্কে নিশ্চিত নই, তবে দূরবর্তী ট্র্যাকিং শাখা নেই এমন সমস্ত স্থানীয় শাখা মুছতে আমি নিম্নলিখিত লাইনটি ব্যবহার করছি :

diff <(git branch --format "%(refname:short)") <(git branch -r | grep -v HEAD | cut -d/ -f2-) | grep '<' | cut -c 3- | xargs git branch -D

ব্যাখ্যা:

  • git branch --format "%(refname:short)" স্থানীয় শাখাগুলির একটি তালিকা দেয়
  • git branch -r | grep -v HEAD | cut -d/ -f2- ফিল্টারিং আউট, দূরবর্তী শাখাগুলির একটি তালিকা দেয় HEAD
  • diff <(...) <(...) বন্ধনীতে দুটি কমান্ডের আউটপুট দেয়
  • grep '<' প্রথম তালিকায় বিদ্যমান শাখাগুলি ফিল্টার করে তবে দ্বিতীয়টিতে নয়
  • cut -c 3- তৃতীয় অক্ষর থেকে শুরু করে রেখা দেয়, এভাবে উপসর্গটি মুছে ফেলা হয় <
  • xargs git branch -Dexecutes git branch -Dপ্রতিটি শাখার নাম বিরুদ্ধে

বিকল্পভাবে, আপনি এটি এড়াতে grep -v '<'পারেন:

diff --old-line-format="%L" --new-line-format="" --unchanged-line-format="" <(git branch --format "%(refname:short)") <(git branch -r | grep -v HEAD | cut -d/ -f2-) | xargs git branch -D
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.