Birçok Git şubem var. Zaten birleştirilmiş olan dalları nasıl silebilirim? Tek tek silmek yerine hepsini silmenin kolay bir yolu var mı?
GÜNCELLEME:
İş akışınızda olası bir ata varsa master ve dev gibi diğer dalları hariç tutmak için ekleyebilirsiniz. Genellikle bir "sprint-start" etiketinden dallanırım ve master, dev ve qa ata değildir.
İlk olarak, remote'da birleştirilen tüm dalları listeleyin.
git branch --merged
Kaldırmak istemediğiniz birkaç dal görebilirsiniz. master veya develop gibi silmek istemediğimiz önemli dalları atlamak için birkaç argüman ekleyebiliriz. Aşağıdaki komut master dalını ve içinde dev olan her şeyi atlayacaktır.
git branch --merged| egrep -v "(^\*|master|dev)"
Eğer atlamak istiyorsanız, egrep komutuna aşağıdaki gibi ekleyebilirsiniz. skip_branch_name` dalı silinmeyecektir.
git branch --merged| egrep -v "(^\*|master|dev|skip_branch_name)"
Halihazırda kontrol edilen dalla birleştirilmiş olan tüm yerel dalları silmek için:
git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
Master ve dev'in ata olmaları durumunda hariç tutulduğunu görebilirsiniz.
ile birleştirilmiş bir yerel şubeyi silebilirsiniz:
git branch -d branchname
Birleştirilmemişse, kullanın:
git branch -D branchname
Git'in eski sürümlerinde remote'dan silmek için kullanın:
git push origin :branchname
Git'in daha yeni sürümlerinde kullanın:
git push --delete origin branchname
Şubeyi uzaktan sildikten sonra, uzaktan izleme şubelerinden kurtulmak için budama yapabilirsiniz:
git remote prune origin
veya diğer cevabın önerdiği gibi uzaktan izleme dallarını tek tek budayın:
git branch -dr branchname
Umarım bu yardımcı olur.
Zaten birleştirilmiş yerel ve uzak dallarımı silmek için aşağıdaki Ruby betiğini kullanıyorum. Eğer bunu birden fazla uzak şubesi olan bir depo için yapıyorsam ve sadece birinden silmek istiyorsam, sadece istediğim uzak şubeleri almak için uzak şubeler listesine bir select deyimi ekliyorum.
#!/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
Git'te bunu sizin için otomatik olarak yapacak bir komut yoktur. Ancak ihtiyacınız olanı size vermek için Git komutlarını kullanan bir komut dosyası yazabilirsiniz. Bu, hangi dallanma modelini kullandığınıza bağlı olarak birçok şekilde yapılabilir.
Bir dalın master ile birleştirilip birleştirilmediğini bilmeniz gerekiyorsa, myTopicBranch birleştirildiyse aşağıdaki komut hiçbir çıktı vermeyecektir (yani onu silebilirsiniz)
$ git rev-list master | grep $(git rev-parse myTopicBranch)
Git branch komutunu kullanabilir ve Bash'teki tüm dalları ayrıştırabilir ve tüm dallar üzerinde bir for
döngüsü yapabilirsiniz. Bu döngüde yukarıdaki komutla dalı silip silemeyeceğinizi kontrol edersiniz.