Chcę usunąć wszystkie gałęzie, które są wyświetlane w danych wyjściowych ...
$ git branch
... ale zachowując aktualną gałąź w jednym kroku . Czy to jest możliwe? Jeśli tak to jak?
git
git-branch
sensorario
źródło
źródło
Odpowiedzi:
Na podstawie odpowiedzi @pankijs utworzyłem dwa aliasy git:
Do dodania
~/.gitconfig
I jak zauważył @torek:
Zasadniczo nigdy nie używaj
-force
wersji, jeśli nie masz 300% pewności, że nie stracisz nic ważnego. Ponieważ jest stracony na zawsze .źródło
git branch branchname commitid
usunie wszystkie gałęzie z wyjątkiem master (zamień master na gałąź, którą chcesz zachować, ale wtedy usunie master)
źródło
grep -v ^*
.master-copy
, na przykładgrep -v "^ *master$"
grep -v "master\|my-other-branch"
.najpierw (przełącz się na gałąź, którą chcesz zachować> ex : master ):
po drugie (upewnij się, że jesteś na master )
źródło
git branch -D $(git branch).Trim()
.$(git branch)
cytować? To nie działa: błąd: nie znaleziono gałęzi „$ (git”. Error: branch „branch)”.git branch -d
(lub-D
) zezwala na wiele nazw gałęzi, ale jest trochę trudne, aby automatycznie podawać „wszystkie lokalne gałęzie z wyjątkiem tego, na którym jestem teraz” bez pisania co najmniej odrobiny kodu.„Najlepszą” (formalnie poprawną) metodą jest użycie
git for-each-ref
do uzyskania nazw gałęzi:ale wtedy jeszcze trudniej jest ustalić, w której gałęzi się znajdujesz (
git symbolic-ref HEAD
znajdujesz jest to "formalnie poprawna" metoda do tego, jeśli chcesz napisać fantazyjny skrypt).Wygodniej możesz użyć
git branch
, który wypisuje nazwy lokalnych oddziałów poprzedzone dwiema spacjami lub (w przypadku bieżącej gałęzi) gwiazdką*
. Więc przeprowadź to przez coś, aby usunąć*
wersję, a otrzymasz nazwy gałęzi oddzielone spacjami, które możesz następnie przekazaćgit branch -d
:lub:
Zwróć uwagę, że małe litery
-d
nie usuwają „nie w pełni scalonej” gałęzi (zobacz dokumentację). Użycie-D
usunie takie gałęzie, nawet jeśli spowoduje to "zgubienie" zatwierdzeń; używaj tego z wielką ostrożnością, ponieważ powoduje to również usunięcie reflogów gałęzi, tak że zwykłe "odzyskiwanie po przypadkowym usunięciu" również nie działa.źródło
git branch -D $(git branch | grep -v '^*')
, jeśli chcesz usunąć te gałęzie, które zostały połączone.Aby usunąć wszystkie połączone gałęzie (z wyjątkiem bieżących
-v ‘*’
):również zrobiłem takie polecenie do całkowitego wyczyszczenia repozytorium:
zaczerpnięte stąd .
źródło
Usuń wszystkie oddziały z wyjątkiem konkretnego oddziału :
Usuń wszystkie lokalne oddziały z wyjątkiem develop i master
źródło
W przypadku systemu Windows w programie PowerShell użyj:
źródło
Kiedyś stworzyłem tę konstrukcję dla mojego środowiska Windows. Może to pomoże komuś innemu. Podczas wykonywania główna i bieżąca gałąź nie są usuwane . Wszystkie inne połączone gałęzie zostaną usunięte niezależnie.
źródło
Aby usunąć wszystkie gałęzie z wyjątkiem bieżącej gałęzi w jednym kroku:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
źródło
Usuń lokalnie wszystkie połączone gałęzie:
Usuń wszystkie oddziały z wyjątkiem konkretnego oddziału :
Usuń wszystkie lokalne oddziały z wyjątkiem develop i master
źródło
Zakładając, że
git branch
pokazuje bieżącą gałąź z prefiksem*
; Używając Powershell, następująca jedna linijka usunie wszystkie gałęzie, które nie zaczynają się od*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Gdzie-obiekt%
= Foreach-Objectźródło
Widzę tutaj wiele zakodowanych na stałe nazw gałęzi ... I myślę, że moja odpowiedź jest dokładniejsza do części pytania dotyczącej „bieżącej gałęzi”, zachowując jednocześnie jedną linię i czytelną dla początkujących użytkowników, takich jak ja. Aby przypisać kredyt tam, gdzie jest należny, odpowiedź jest raczej oparta na odpowiedzi @ pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
i mam alias w jednej linii w moich .bash_aliases w debianie.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Chociaż myślę, że niektóre funkcje basha muszą być włączone, aby polecenie sub działało w niektórych wierszach poleceń)
źródło
Używam tego, ponieważ jestem bardziej selektywny w tym, czego nie chcę usuwać. Poniższe polecenie usuwa każdą gałąź z wyjątkiem master, develop i bieżącej gałęzi.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D) echo $BRANCHES
Więc umieściłem to w moim
~/.zshrc
źródło
IMHO, najbezpieczniejszym sposobem usuwania lokalnych oddziałów jest:
Więcej informacji związanych z tym tematem można znaleźć w sekcji Usuń wszystkie lokalne gałęzie git
źródło
gone
znacznik, którego powinieneś użyć-vv
(dwukrotnie gadatliwy), ale ci-a
nie pomoże (wyświetla również zdalne gałęzie)