Frage Wie kann ich alle Git-Zweige löschen, die zusammengeführt wurden?


Ich habe viele Git-Zweige. Wie lösche ich Zweige, die bereits zusammengeführt wurden? Gibt es eine einfache Möglichkeit, sie alle zu löschen anstatt sie einzeln zu löschen?


1312
2018-05-25 15:54


Ursprung


Antworten:


AKTUALISIEREN:

Sie können andere Zweige zum Ausschließen hinzufügen, wie Master und Entwicklung, wenn Ihr Workflow diese als möglichen Vorfahren hat. Normalerweise verzweige ich von einem Sprint-Start-Tag und Master, Dev und Qa sind keine Vorfahren.

So löschen Sie alle lokalen Zweige, die bereits in den aktuell ausgecheckten Zweig eingebunden sind:

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

Sie können sehen, dass Master und Dev ausgeschlossen sind, falls sie ein Vorfahre sind.


Sie können eine zusammengeführte lokale Verzweigung löschen mit:

git branch -d branchname

Wenn es nicht zusammengeführt wird, verwenden Sie:

git branch -D branchname

Um es in alten Versionen von Git von der Fernbedienung zu löschen, benutze:

git push origin :branchname

In neueren Versionen von Git verwenden Sie:

git push --delete origin branchname

Sobald Sie die Verzweigung von der Remote gelöscht haben, können Sie entfernen, um Remote-Tracking-Zweige loszuwerden mit:

git remote prune origin

oder beschneiden einzelne Remote-Tracking-Zweige, wie die andere Antwort vermuten lässt, mit:

git branch -dr branchname

Hoffe das hilft.


2226
2018-05-25 16:40



So löschen Sie alle Zweige auf Remote, die bereits zusammengeführt sind:

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

In neueren Versionen von Git

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

316
2017-08-09 08:45



Erweitern Sie einfach Adams Antwort ein wenig:

Fügen Sie dies Ihrer Git-Konfiguration hinzu, indem Sie es ausführen git config -e --global

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

Und dann können Sie alle lokalen verbundenen Zweige löschen, indem Sie ein einfaches tun git cleanup.


135
2018-02-18 15:08



Dies funktioniert auch, um alle verbundenen Zweige außer Master zu löschen.

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

72
2018-02-07 01:06



Sie möchten das ausschließen master & develop verzweigt sich von diesen Befehlen.

Lokales Git klar:

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

Remote Git klar:

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

Synchronisieren Sie die lokale Registrierung von Remote-Zweigstellen:

git fetch -p

57
2017-07-03 16:18



Für diejenigen von Ihnen, die Windows verwenden und PowerShell-Skripts bevorzugen, können Sie hier die folgenden Bereiche auswählen:

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

32
2018-06-10 14:00



Git Sweep macht einen tollen Job.


19
2018-02-04 13:53



Sie können die Festschreibung der Option --merged hinzufügen. Auf diese Weise können Sie sicherstellen, dass nur die Zweige entfernt werden, die in den Ursprung / Master eingebunden sind

Der folgende Befehl entfernt verschmolzene Zweige von Ihrem Ursprung.

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

Sie können testen, welche Zweige entfernt werden und den Git-Push-Ursprung --delete durch Echo ersetzen

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

13
2017-07-08 06:28



Ich verwende das folgende Ruby-Skript, um meine bereits zusammengeführten lokalen und entfernten Zweige zu löschen. Wenn ich es für ein Repository mit mehreren Fernbedienungen mache und nur von einem löschen möchte, füge ich einfach eine select-Anweisung in die Fernbedienungsliste ein, um nur die gewünschten Fernbedienungen zu erhalten.

#!/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
2017-09-27 23:41