LainyZine: 프로그래머 가이드 🐣

로컬 Git 저장소의 브랜치를 삭제하는 방법

Git 저장소 하나에 다수의 브랜치를 만드는 것이 가능합니다. 브랜치 기능을 사용해 하나의 프로젝트를 여러 컨텍스트에서 코드 작업을 할 수 있습니다. 하지만 브랜치 작업이 끝났거나, 필요 없어지면 해당 브랜치를 삭제하는 것이 좋습니다. 이 글에서는 로컬 Git 저장소의 브랜치 목록을 확인하고 삭제하는 방법에 대해서 소개합니다.

로컬 브랜치 목록을 확인하는 방법

브랜치를 삭제하기 전에 먼저 브랜치 목록을 확인해봅니다.

$ git branch
$ git branch --list

브랜치 목록이 출력됩니다. 이 때 현재 활성화된 브랜치는 *로 표시해서 보여줍니다.

list 옵션을 사용했을 때와 사용하지 않았을 때의 결과는 같습니다. 단, git branch 뒤에 인자를 넘겨주면 새로운 브랜치를 생성하기 때문에 목록을 확인할 때는 list 옵션을 사용하는 것을 추천합니다. 또한 list 옵션을 사용하면 간단한 필터링이 가능합니다. 다음과 같이 실행하면 기능 개발 브랜치만 찾아볼 수 있습니다.

$ git branch --list 'feature/*'

git branch -d: 브랜치를 삭제하는 방법

브랜치 목록을 확인했으니 삭제하고자 하는 브랜치를 아래 명령어로 삭제하면 됩니다.

git branch -d [BRANCH_NAME]
git branch --delete [BRANCH_NAME]

브랜치를 삭제하는 건 간단합니다만, 이 명령어로 모든 브랜치를 삭제할 수 있는 것은 아닙니다. 그 부분은 이어서 살펴보겠습니다.

머지된 브랜치와 머지되지 않은 브랜치

Git 저장소에서는 브랜치가 머지되었는지, 아직 머지 되지 않았는지 상태를 체크하고 있습니다. 좀 더 정확히 표현하자면 현재 HEAD에서 브랜치의 위치에 접근 가능한지 여부를 체크합니다. 브랜치를 삭제할 때 이 상태에 따라서 결과가 달라지기 때문에 먼저 머지 여부를 확인하는 방법에 대해서 간단한 예제로 알아보겠습니다.

main 브랜치에서 단순히 새로운 브랜치를 만들면 HEAD와 해당 브랜치가 같기 때문에 merged 상태가 됩니다.

# main 브랜치에서 브랜치 만듭니다.
(main)$ git branch feature/new-feature

merged 옵션과 no-merged 옵션을 각각 머지된 브랜치 목록과 머지 되지 않은 브랜치 목록을 확인해봅니다.

(main)$ git branch --merged
main
feature/new-feature

(main)$ git branch --no-merged

merged 목록에는 mainfeature/new-feature가 포함되지만, no-merged에는 아무 목록이 출력되지 않습니다.

이번에는 feature/new-feature 브랜치에 새로운 커밋을 추가하고 확인해보겠습니다.

# feature/new-feature 브랜치에 커밋 추가(과정은 생략)
# main 브랜치로 돌아와서 브랜치 목록 확인
(main)$ git branch --merged
main

(main)$ git branch --no-merged
feature/new-feature

이제 feature/new-feature 브랜치가 no-merged 상태가 되었습니다.

자, 중요한 건 이 상태에서는 앞서 배운 브랜치 삭제 명령어로 브랜치를 삭제할 수 없다는 점입니다. 한 번 삭제를 시도해보겠습니다.

(main)$ git branch --delete feature/new-feature
error: The branch 'feature/new-feature' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature/new-feature'.

예상대로 에러가 나면서 실패합니다.

git branch -D: 머지되지 않은 브랜치를 강제로 삭제하기

앞에서 머지되지 않은 브랜치를 삭제하려고 하면 에러가 나면서 브랜치가 삭제되지 않았습니다. 그럼 이 브랜치를 삭제하고 싶다면 어떻게 해야할까요? 정답은 에러 메시지 안에 포함되어 있습니다.

If you are sure you want to delete it, run 'git branch -D feature/new-feature'.

즉, 다음 명령어를 실행하면 됩니다.

$ git branch -D feature/new-feature

처음에 배운 옵션은 소문자 d입니다만, 이번에는 대문자 D라는 점이 다릅니다. 좀 더 정확히 풀어쓰면 D 옵션은 아래 명령어와 같습니다.

$ git branch --delete --force feature/new-feature

결론입니다. -D 옵션이나 --delete --force 옵션을 사용하면 머지 여부와 무관하게 브랜치를 삭제할 수 있습니다.

Git 저장소의 브랜치 삭제 방법 정리

branch 서브 커맨드의 d 옵션을 사용하면 브랜치를 삭제할 수 있습니다. 아래 두 명령어는 같습니다.

git branch -d [BRANCH_NAME]
git branch --delete [BRANCH_NAME]

단, 현재 HEAD 기준으로 머지 되지 않은 브랜치는 삭제할 수 없습니다. 다음 명령어들로 저장소 목록을 확인할 수 있습니다.

# 전체 브랜치 목록
git branch

# 머지된 브랜치 목록
git branch --merged

# 머지 되지 않은 브랜치 목록
git branch --no-merged

머지 되지 않은 브랜치를 강제로 삭제하려면 D 옵션을 사용합니다. 이 옵션을 사용하면 어떤 브랜치도 삭제할 수 있습니다. 아래 두 명령어는 같습니다.

git branch -D [BRANCH_NAME]
git branch --delete --force [BRANCH_NAME]
LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.