Я хочу видалити всі гілки, які перераховані у вихідних даних ...
$ git branch
... але збереження поточної гілки в один крок . Це можливо? Якщо так, то як?
Я хочу видалити всі гілки, які перераховані у вихідних даних ...
$ git branch
... але збереження поточної гілки в один крок . Це можливо? Якщо так, то як?
Відповіді:
На основі відповіді @pankijs я створив два псевдоніми git:
[alias]
# Delete all local branches but master and the current one, only if they are fully merged with master.
br-delete-useless = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
}; f"
# Delete all local branches but master and the current one.
br-delete-useless-force = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
}; f"
Додавати в ~/.gitconfig
І, як зазначив @torek:
Зауважте, що малі літери
-dне видалять гілку "не повністю злитого" (див. Документацію). Використання-Dвидалить такі гілки , навіть якщо це призведе до того, що коміти втратяться; використовуйте це з великою обережністю , оскільки це також видаляє перезаписування гілок, так що звичайні речі "відновлення від випадкового видалення" теж не працюють.
По суті, ніколи не використовуйте -forceверсію, якщо ви не впевнені на 300%, що не втратите нічого важливого. Бо це втрачено назавжди .
git branch branchname commitid
$ git branch | grep -v "master" | xargs git branch -D
видалить всі гілки, крім master (замініть master на гілку, яку ви хочете зберегти, але потім видалить master)
grep -v ^*.
master-copy, наприклад
grep -v "^ *master$"
grep -v "master\|my-other-branch".
спочатку (перейдіть до гілки, яку ви хочете зберегти> ex : master ):
git checkout master
друге (переконайтеся, що ви на магістратурі )
git branch -D $(git branch)
git branch -D $(git branch).Trim().
git branch -d(або -D) дозволяє декілька назв гілок, але трохи складно автоматично подавати "всі локальні гілки, за винятком тієї, на якій я зараз перебуваю", не записуючи хоча б трохи коду.
Найкращим (формально правильним) методом є використання git for-each-refімен гілок:
git for-each-ref --format '%(refname:short)' refs/heads
але тоді ще важче зрозуміти, на якій гілці ви перебуваєте ( git symbolic-ref HEADце "формально правильний" метод для цього, якщо ви хочете написати химерний сценарій).
Більш зручно, ви можете використовувати git branch, який друкує імена локальних гілок, перед якими стоять два пробіли або (для поточної гілки) зірочка *. Отже, пропустіть це через щось, щоб видалити *версію, і у вас залишаться відокремлені пробілом імена гілок, яким ви потім зможете передати git branch -d:
git branch -d $(git branch | grep -v '^*')
або:
git branch | grep -v '^*' | xargs git branch -d
Зауважте, що малі літери -dне видалять гілку "не повністю злитого" (див. Документацію). Використання -Dвидалить такі гілки, навіть якщо це призведе до того, що коміти втратяться; використовуйте це з великою обережністю, оскільки це також видаляє перезаписування гілок, так що звичайні речі "відновлення від випадкового видалення" теж не працюють.
git branch -D $(git branch | grep -v '^*'), якщо ви хочете видалити ті гілки, які об’єдналися.
Щоб видалити всі об’єднані гілки (крім поточної -v ‘*’):
git branch --merged | grep -v '*' | xargs git branch -D
також я зробив таку команду для повного очищення репо:
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
взято звідси .
Видалити всі гілки, крім певної гілки :
git branch | grep -v "branch name" | xargs git branch -D
Видаліть усі локальні гілки, окрім розробки та освоєння
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
Для Windows у програмі Powershell:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
Видалити всі об’єднані гілки локально:
git branch -D `git branch --merged | grep -v \* | xargs`
Видалити всі гілки, крім певної гілки :
git branch | grep -v "branch name" | xargs git branch -D
Видаліть усі локальні гілки, окрім розробки та освоєння
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
Одного разу я створив цю конструкцію для мого середовища Windows. Можливо, це допоможе комусь іншому. Під час виконання головна та поточна гілки не видаляються . Усі інші об’єднані гілки буде видалено незалежно.
@echo off
cd PATH_TO_YOUR_REPO
REM -- Variable declerations
set "textFile=tempBranchInfo.txt"
set "branchToKeep=master"
set "branchToReplaceWith="
git branch --merged > %textFile%
REM -- remove "master" from list to keep the branch
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%branchToKeep%=%branchToReplaceWith%!
endlocal
)
REM -- execute branch delete commands
for /f "delims=" %%a in (%textFile%) do (
git branch -D %%a
)
REM -- remove temp-file with branch information inside
DEL %textFile%
REM -- show local branches after the cleaning
echo Local branches:
git branch
pause
exit
Тож я бачу тут безліч твердо закодованих назв гілок ... І я думаю, що моя відповідь тут є більш точною до "поточної гілки" частини запитання, зберігаючи її в одному рядку та читабельною для новачків, таких як я. Просто щоб розмістити кредит там, де це потрібно, відповідь досить очевидно також базується на відповіді @ pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
і у мене це псевдонім на одному рядку в моїх .bash_aliases також у debian.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Хоча я думаю, що деякі функції bash повинні бути активовані, щоб допоміжна команда працювала в деяких командних рядках)
Я використовую це, тому що стаю більш вибірковим у тому, що не хочу видаляти. Ця команда нижче видаляє кожну гілку, окрім майстра, розробки та поточної гілки.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
Тож я помістив це в своє ~/.zshrc
delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches
ІМХО, найбезпечнішим способом видалення місцевих гілок є:
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
Крім того, більше інформації, пов’язаної з цією темою, ви можете знайти Видалити всі локальні гітки git
goneмаркера, який ви повинні використати -vv(детально двічі), в той час як вам -aне допоможе (він також містить перелік віддалених гілок)