Вопрос: Как удалить все ветви Git, которые были объединены?


У меня много ветвей Гита. Как удалить ветви, которые уже были объединены? Есть ли простой способ удалить их все, а не удалять их по одному?


1274


источник


Ответы:


ОБНОВИТЬ:

Вы можете добавить другие ветви для исключения, например, master и dev, если ваш рабочий процесс имеет их как возможный предок. Обычно я отключаю тэг «спринт-старт» и мастер, dev и qa не являются предками.

Чтобы удалить все локальные ветви, которые уже объединены в текущую проверенную ветку:

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

Вы можете видеть, что мастер и разработчик исключены, если они являются предками.


Вы можете удалить объединенную локальную ветку с помощью:

git branch -d branchname

Если он не слит, используйте:

git branch -D branchname

Чтобы удалить его с удаленного устройства в старых версиях Git, используйте:

git push origin :branchname

В более поздних версиях Git:

git push --delete origin branchname

Как только вы удаляете ветку с удаленного устройства, вы можете обрезать, чтобы избавиться от удаленных ветвей отслеживания с помощью:

git remote prune origin

или обрезать отдельные ветви удаленного отслеживания, как предлагает другой ответ, с:

git branch -dr branchname

Надеюсь это поможет.


2168



Чтобы удалить все ветки на удаленном сервере, которые уже объединены:

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

В более поздних версиях Git

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

302



Просто добавив немного ответа Адама:

Добавьте это в свою конфигурацию Git, запустив git config -e --global

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

И тогда вы можете удалить все локальные объединенные ветви, выполняя простые git cleanup,


129



Это также позволяет удалить все объединенные ветви, кроме мастера.

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

72



Вы хотите исключить master& developветвей от этих команд.

Местный git ясно:

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

Удаленный git clear:

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

Синхронизация локального реестра удаленных филиалов:

git fetch -p

56



Для тех из вас, кто находится в Windows и предпочитает сценарии PowerShell, вот тот, который удаляет локальные объединенные ветки:

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

30



Git Sweep does a great job of this.


19



You can add the commit to the --merged option. This way you can make sure only to remove branches which are merged into i.e. the origin/master

Following command will remove merged branches from your origin.

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

You can test which branches will be removed replacing the git push origin --delete with echo

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

12



I use the following Ruby script to delete my already merged local and remote branches. If I'm doing it for a repository with multiple remotes and only want to delete from one, I just add a select statement to the remotes list to only get the remotes I want.

#!/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

11



Using Git version 2.5.0:

git branch -d `git branch --merged`

11



kuboon's answer missed deleting branches which have the word master in the branch name. The following improves on his answer:

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

Of course, it does not delete the "master" branch itself :)


8



How to delete merged branches in PowerShell console

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

See GitHub for Windows


8