Git 병합된 분기를 일괄 삭제

문제



Git 브랜치는 원격 리포지토리에서 병합될 때 자동으로 삭제되지 않으므로 직접 삭제해야 합니다.

환경


$ git --version
git version 2.26.2

예비 지식



병합된 브랜치 표시


$ git branch --merged

보충: 병합되지 않은 브랜치 표시


$ git branch --no-merged

보충: 원격 리포지토리를 포함한 모든 브랜치 목록 보기


$ git branch --all
$ git branch -a

브랜치 삭제


$ git branch -d feature/issue-xxx
$ git branch -D feature/issue-xxx
-d 옵션이 병합되지 않은 분기는 삭제되지 않습니다.-D 옵션은 병합되지 않은 분기를 강제로 제거합니다.

원격 리포지토리에서 삭제된 브랜치 삭제


git featch 할 때 prune 옵션을 붙이면 삭제된 브랜치를 삭제해 줍니다.
$ git fetch --prune
$ git fetch -p

보충: 항상 prune 옵션 사용


$ git config --global fetch.prune true

주제


git fetch --prune 에서 리모트 리포지토리에서 삭제된 브랜치를 삭제한 후 git branch --merged 로 나온 브랜치를 삭제하면 됩니다.

주의점으로서는, masterdevelopment 와 같은 특정의 브랜치는 삭제 대상외로 하고 싶은 곳입니다.git alias 를 사용해도 괜찮습니다.
.gitconfig 하지만 zsh 에서도 작동하지만, bash 의 예로 진행합니다.
zsh 에 다음 코드를 추가합니다.

~/.zshrc
PROTECT_BRANCHES='master|development'

git-delete-merged-branch() {
    git fetch --prune
    git branch --merged | egrep -v "\*|${PROTECT_BRANCHES}" | xargs git branch -d
}

보호하려는 브랜치는 ~/.zshrc 의 환경 변수에 PROTECT_BRANCHES 구분 기호로 추가하십시오.
쉘의 구성 파일을 다시 읽습니다.
$ exec $SHELL -l

명령을 실행합니다. (Git이 관리하는 디렉토리에서 실행하십시오)
$ git-delete-merged-branch



시험에 실행하면 이런 느낌입니다.

보충: .gitconfig 별칭으로 할 경우


| 의 alias 설정으로 하고 싶은 경우는 아래와 같이 합니다.
[alias]
    delete-merged-branch = !git branch --merged | egrep -v '\\*|master|development' | xargs git branch -d
$ git delete-merged-branch

Git 관련 기사 요약


  • Git 관련 기사 목록
  • 좋은 웹페이지 즐겨찾기