모든 로컬 git 분기 삭제
저는 새로운 기능이나 스토리 카드마다 새로운 로컬 지점을 만드는 개발 프로세스를 따릅니다.완료되면 브런치를 마스터로 통합한 후 푸시합니다.
게으름과 건망증이 겹치면서 시간이 지남에 따라 발생하는 경향이 있는 것은 결국 많은 지역 지사 목록이 생기게 되는데, 그 중 일부 지점(예: 스파이크 지점)은 합병되지 않았을 수 있습니다.
로컬 브랜치를 모두 나열하는 방법과 하나의 브랜치를 삭제하는 방법을 알고 있는데, 로컬 브랜치를 모두 삭제할 수 있는 git 명령어가 있는지 궁금합니다.
은 음음음음 below below below의 of of of of of of of of of of 의 결과입니다.git branch --merged
명령어를 입력합니다.
user@machine:~/projects/application[master]$ git branch --merged
STORY-123-Short-Description
STORY-456-Another-Description
STORY-789-Blah-Blah
* master
하려고 합니다.grep -v \*
) 에러가
error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.
사용하고 있는 것:
git 1.7.4.1
ubuntu 10.04
GNU bash, version 4.1.5(1)-release
GNU grep 2.5.4
'git branch -d' 하위 명령은 두 개 이상의 분기를 삭제할 수 있습니다.따라서 @sblom의 답변을 단순화하지만 중요한 xargs를 추가합니다.
git branch -D `git branch --merged | grep -v \* | xargs`
또는, 한층 더 심플화:
git branch --merged | grep -v \* | xargs git branch -D
중요한 것은 @AndrewC에서 설명한 바와 같이git branch
스크립트 작성은 권장되지 않습니다.이를 방지하려면 다음과 같은 방법을 사용합니다.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main" | xargs git branch -D
삭제 시 주의가 필요합니다!
$ mkdir br
$ cd br; git init
Initialized empty Git repository in /Users/ebg/test/br/.git/
$ touch README; git add README; git commit -m 'First commit'
[master (root-commit) 1d738b5] First commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README
$ git branch Story-123-a
$ git branch Story-123-b
$ git branch Story-123-c
$ git branch --merged
Story-123-a
Story-123-b
Story-123-c
* master
$ git branch --merged | grep -v \* | xargs
Story-123-a Story-123-b Story-123-c
$ git branch --merged | grep -v \* | xargs git branch -D
Deleted branch Story-123-a (was 1d738b5).
Deleted branch Story-123-b (was 1d738b5).
Deleted branch Story-123-c (was 1d738b5).
모든 브랜치를 삭제하되 "develope" 및 "master"와 같은 브랜치를 유지하는 보다 간단한 방법은 다음과 같습니다.
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
매우 유용하다!
나는 github의 이 문제에 대한 코멘트에서 더 좋은 방법을 찾았다.
git branch --merged master --no-color | grep -v "master\|stable\|main" | xargs git branch -d
편집: 무색 옵션 추가 및 안정적인 브랜치 제외 (필요에 따라 다른 브랜치 추가)
「 」의 출력 git branch
을 사용하다스택 오버플로우에서 향후 독자들에게는 좋은 답변이 아닙니다.
git branch
' 명령어라고 알려져 .자기 명령어'라고 알려져 있습니다.자기 명령은 기계 구문 분석용으로 설계되지 않았으며 Git의 다른 버전 간에 출력이 변경될 수 있습니다.- 에서는, 「」의 할 수 .
git branch
해석하기 어려운 방법(예를 들어, 색채화)입니다.가 '하다'를color.branch
코드가 .★★★★★★★★★★★★★★★★,error: branch 'foo' not found.
다른 명령어에 연결하려고 할 경우.를 사용하면, 할 수 .--no-color
을 들다git branch
하지만, 그 외의 유저 설정에서는 문제가 발생할 가능성이 있습니다. git branch
는, 체크 아웃 있는 옆에 해석하기 다른 할 수 .
git의 maintainer는 스크립트 작성에 대해 이렇게 말합니다.git branch
현재의 브랜치를 알아내기 위해 캐주얼/경솔한 사용자는 git 브랜치를 중심으로 스크립트를 작성했을 수 있습니다.이것은 잘못된 것입니다.git branch를 포함한 Poshis 명령어를 스크립트에서 사용하는 것은 적극적으로 권장하지 않습니다.명령어 출력은 인간의 사용 사례에 도움이 되도록 변경될 수 있기 때문입니다.
「」의 을 수동으로 하는 것을 ..git
디렉토리(.git/refs/heads 등)도 마찬가지로 문제가 있습니다(refs는 대신 .git/packed-refs에 있거나 Git은 나중에 내부 레이아웃을 변경할 수 있습니다).
은 Git을 합니다.for-each-ref
명령어를 사용하여 브랜치 목록을 가져옵니다.
2는 Git 2.7을 이다.X자--merged
된 모든 을 찾아 할 수 .HEAD
for mergedBranch in $(git for-each-ref --format '%(refname:short)' --merged HEAD refs/heads/)
do
git branch -d ${mergedBranch}
done
Git 2.6.X 이전 버전에서는 로컬 브랜치를 모두 나열한 후 개별적으로 테스트하여 통합 여부를 확인해야 합니다(이는 상당히 느리고 약간 복잡해집니다).
for branch in $(git for-each-ref --format '%(refname:short)' refs/heads/)
do
git merge-base --is-ancestor ${branch} HEAD && git branch -d ${branch}
done
다음 셸 명령을 사용해 보십시오.
git branch | grep -v "master" | xargs git branch -D
설명:
- 제외)를 '마스터' 경유로 합니다.
git branch | grep -v "master"
- 를 모두 합니다.
xargs
- 삭제(「」(「」)로 합니다.
xargs git branch -D
다음 명령어는 마스터 브랜치를 제외한 모든 로컬브런치를 삭제합니다.
git branch | grep -v "master" | xargs git branch -D
위의 명령어
- 모든 지점을 나열하다
- 목록에서 마스터 브랜치를 무시하고 나머지 브랜치를 가져옵니다.
- 브랜치를 삭제하다
현재 체크아웃한 브런치를 제외한 모든 브런치를 삭제하려면 다음 절차를 수행합니다.
for b in `git branch --merged | grep -v \*`; do git branch -D $b; done
것을 .git branch -D $b
echo $b
처음 몇 번을 사용하여 의도한 분기가 삭제되었는지 확인합니다.
현재 지점을 제외한 리눅스의 모든 로컬 지점을 삭제하려면 다음과 같이 하십시오.
// hard delete
git branch -D $(git branch)
710 1 . 7 . 10 1 1 。현재 버전에서는 작동하지 않는 답변을 얻을 수 있습니다.에는 '보다'를 붙여야 할 것 같아요.refs/heads/
.
주의: 작업 폴더와 .git 디렉토리를 복사한 경우에만 다음 절차를 진행하십시오.
는 가끔 않는 ..git/refs/heads
이들 브랜치는 모두 그들이 가리키는 커밋의 40글자 sha-1을 포함하는 텍스트파일입니다.의 ' 정보'에는 이와 ..git/config
특정 추적을 설정했는지 확인합니다.이러한 엔트리는 수동으로 삭제할 수도 있습니다.
텍스트 에디터와 셸만 사용하는 것이 더 편하다는 것을 알았습니다.
- 「」라고 입력합니다.
git checkout <TAB>
브랜치를 모두 합니다.모든 로컬 분기를 표시합니다. - 텍스트 편집기에 복사하고 보관해야 할 내용을 제거합니다.
- 줄 바꿈을 공백으로 바꿉니다.(숭고함)텍스트는 매우 간단합니다.)
- " " " , " 라고 입력합니다.
git branch -D <PASTE THE BRANCHES NAMES HERE>
.
바로 그겁니다.
Windows 명령줄에서 다음 명령을 사용하여 현재 체크아웃된 분기를 제외한 모든 항목을 삭제합니다.
for /f "tokens=*" %f in ('git branch ^| find /v "*"') do git branch -D %f
로컬 브런치를 모두 삭제하려면 다음 명령을 사용합니다.
git branch -D `git branch`
참고: 현재 체크아웃된 분기를 제외한 모든 분기가 삭제됩니다.
저도 비슷한 상황이 있었는데, 최근에 다음 명령어가 도움이 되었습니다.
git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep>/) printf "%s", $0 }'`
여러 지점을 유지하려면
git branch -D `git branch | awk '{ if ($0 !~ /<Branch_You_Want_to_Keep1>|<Branch_You_Want_to_Keep2>/) printf "%s", $0 }'`
이게 도움이 됐으면 좋겠어요
Windows 머신 상에서 가동하고 있는 사용자를 위한 Powershell 솔루션
git checkout master # by being on the master branch, you won't be able to delete it
foreach($branch in (git branch))
{
git branch -D $branch.Trim()
}
로컬 git 브랜치를 모두 제거하고 메인 상태를 유지하려면
git branch | grep -v "main" | xargs git branch -D
첫 번째 (> ex: 마스터를 유지하는 브랜치로 전환):
git checkout master
second(마스터에 있는지 확인)
git branch -D $(git branch)
PowerShell을 사용하는 경우
git branch -D $(git branch).Trim()
NodeJS를 사용하는 경우 다음 명령을 작성했습니다.
npx git-clear-branch
이 명령어는 마스터 브랜치와 현재 브랜치를 제외한 모든 로컬브런치를 클리어합니다.
git branch -l |grep -v master | xargs git branch -D
그러나 브랜치를 삭제해도 상관없습니다.워크스페이스를 삭제하고 작은 저장소라면 다시 복제해 주세요!!
명령줄 솔루션은 아니지만 Git GUI가 아직 제안되지 않은 것이 놀랍습니다.
커맨드 라인을 99% 사용하고 있습니다만, 이 경우는 속도가 느려지거나(즉, 원래의 질문), 장황하지만 교묘한 셸 조작에 의지했을 때에 무엇을 삭제하려고 하는지 알 수 없습니다.
각 브랜치에 명령어를 입력할 필요 없이 삭제할 브랜치를 빠르게 체크 아웃하고 유지할 브랜치를 상기시킬 수 있기 때문에 UI는 이 문제를 해결합니다.
UI에서 Branch --> Delete로 이동하고 Ctrl+삭제할 브런치를 클릭하여 강조 표시합니다.브런치(예: 브런치)로 통합되는 것을 확인하는 경우dev
[ Delete Only if Mergeed Into ]에서 [Local Branch]를 설정합니다.dev
그렇지 않으면 이 체크를 무시하려면 항상으로 설정합니다.
Git 자체를 사용할 필요가 없다면 .git/refs/heads 아래의 헤드를 수동으로 또는 프로그래밍 방식으로 삭제할 수도 있습니다.다음은 Bash에서 최소한의 조정으로 작동합니다.
shopt -s extglob
rm -rf .git/refs/heads/!(master)
마스터 브랜치를 제외한 모든 로컬 브랜치가 삭제됩니다.업스트림브런치는 .git/refs/remotes 아래에 저장되므로 변경되지 않습니다.
Bash를 사용하지 않거나 많은 Git 저장소를 한 번에 다시 찾고 싶다면 GNU에서 비슷한 작업을 수행할 수 있습니다.
find . \
-path remotes -path logs -prune -o \
-wholename \*.git/refs/heads/\* \! -name master -print0 |
xargs -0 rm -rf
검색 솔루션이 더 휴대성이 높지만 경로와 파일 이름을 삭제하는 것은 까다롭고 오류가 발생하기 쉽습니다.
어떤 답변도 제 요구를 완전히 충족시키지 못했습니다.그러면 다음과 같이 하겠습니다.
git branch --merged | grep -E "(feature|bugfix|hotfix)/" | xargs git branch -D && git remote prune origin
가 모두 삭제됩니다.feature/
,bugfix/
★★★★★★★★★★★★★★★★★」hotfix/
후 " " " origin
는 플루닝 됩니다(패스워드를 입력해야 할 수 있습니다).
Git 1.9.5에서 동작합니다.
여기에 있는 여러 응답 조합에 따라 - 원격에 있는 모든 분기를 유지하고 나머지 분기를 삭제하려는 경우 다음 오닐라이너가 문제를 해결합니다.
git for-each-ref --format '%(refname:short)' refs/heads | grep -Ev `git ls-remote --quiet --heads origin | awk '{print substr($2, 12)}'| paste -sd "|" -` | xargs git branch -D
마스터를 유지하려면 및 모든 원격 지점을 개발하십시오.Github에 존재하지 않는 모든 로컬브런치를 삭제합니다.
$ git fetch --prune
$ git branch | grep -v "origin" | grep -v "develop" | grep -v "master" | xargs git branch -D
1] 리모트 저장소에서 사용되지 않게 된 리모트 참조가 삭제됩니다.
2] 모든 브랜치의 리스트가 표시됩니다.master, develope 또는 origin(원격 브랜치)목록의 모든 분기를 삭제합니다.
경고 - 자체 로컬 지점도 삭제됩니다.따라서 브런치를 Marge하고 Marge, Delete 후 정리를 수행할 때 이 작업을 수행합니다.
git branch -d [branch name]
git branch -D [branch name]
할 수 있지만 으로 사용할 수 있습니다.
여러 로컬 브랜치를 한 번에 삭제하는 중
# delete all local unmerged branches
git branch --no-merged | egrep -v "(^\*|master|dev)" | xargs git branch -D
# delete all local branches (merged and unmerged).
git branch | egrep -v "(^\*|master|dev)" | xargs git branch -D
원격 분기 삭제 중
# Deleting non-existent tracking branches
git remote prune <remote> --dry-run
# Deleting a single remote branch
git push <remote> --delete <branch>
# Deleting many remote branches at once
git branch -r --merged | egrep -v "(^\*|master|dev)" | sed 's/origin\///' | xargs -n 1 git push origin --delete
powershell의 경우 다음과 같이 동작합니다.
git branch --format '%(refname:lstrip=2)' --merged `
| Where-Object { $_ -ne 'master' } `
| ForEach-Object { git branch -d $_ }
GREP나 다른 UNIX는 가지고 있지 않지만 VSCode 터미널에서 작동했습니다.
git branch -d $(git branch).trim()
병합되지 않은 브랜치는 삭제되지 않도록 소문자 d를 사용합니다.
나도 그때 마스터였으니까* master
존재하지 않기 때문에 마스터 삭제는 시도하지 않았습니다.
좀 더 온건한 답변을 추천합니다.은 '아예'를 사용하고 있습니다.-D
변경 내용이 Marge되었는지 여부에 관계없이 강제로 삭제됩니다.이 라이너에는 잔해가 없는 나뭇가지를 건드리지 않는 것이 있습니다.
git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
여기에 있는 다른 해 보고 .-D
로로 합니다.-d
의 경우하는 것이 -d
.
git branch | grep release-1.4 | xargs -n 1 -I % sh -c 'git branch -D %'
'release-1.4*' 패턴과 일치하는 이름의 브랜치를 모두 쉽게 삭제할 수 있습니다.또한 정기적으로 티켓 접두사와 함께 사용하여 로컬 영업 지점을 모두 삭제합니다. 단, 파이프라인 브랜치는 연결되지 않은 상태로 둡니다.
이를 위해 git-extra를 사용할 수 있습니다.
$ git delete-merged-branches
Deleted feature/themes (was c029ab3).
Deleted feature/live_preview (was a81b002).
Deleted feature/dashboard (was 923befa).
언급URL : https://stackoverflow.com/questions/10610327/delete-all-local-git-branches
'programing' 카테고리의 다른 글
왜 스위프트에 편의 키워드가 필요한가? (0) | 2023.04.09 |
---|---|
StringFormat을 사용한 WPF 바인딩이 ToolTips에서 작동하지 않음 (0) | 2023.04.09 |
XAML에서 이중 따옴표와 단일 따옴표가 포함된 텍스트를 표시하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
Windows에 OpenJDK 11을 설치하는 방법 (0) | 2023.04.09 |
Spring Web Client에서 여러 헤더를 동시에 설정하는 방법 (0) | 2023.04.04 |