Original article: Git Delete Branch – How to Remove a Local or Remote Branch

Git은 많은 이들의 사랑을 받고 있는 버전 관리 시스템이자 웹 개발자의 필수 도구입니다.

브랜치(branch)는 Git이 제공하는 강력하고 중요한 기능 중 하나입니다.

이번 기사에서는 Git의 로컬 및 원격 브랜치를 삭제하는 기본적인 방법을 다뤄보겠습니다.

브랜치란

브랜치는 커밋을 가리키는 포인터(pointer)입니다.

Git 브랜치는 특정 시점에서의 프로젝트 변경이력을 기록하는 스냅숏입니다. (스냅숏(snapshot)은 특정 시점에 프로젝트 파일의 상태를 마치 사진 찍듯이 저장해 기록하는 기술을 의미합니다. - 옮긴이)

규모가 큰 프로젝트의 소스 코드를 관리할 때, 기준이 되는 기본 저장소를 main 또는 master라고 부릅니다(최근 master란 단어가 노예제를 연상시킨다는 이유로 기본 저장소를 main으로 부르는 것을 권장하고 있습니다. - 옮긴이).

브랜치는 작업 중인 프로젝트의 독립적인 버전을 따로 만들 수 있는 기능을 제공합니다. 프로젝트를 진행하다 보면 코드 수정, 새 기능 추가, 디버깅을 위한 테스트 작성 등과 같은 작업이 필요합니다. 이와 같은 작업을 새로 생성한 브랜치에서 진행하면 메인 소스 코드를 안전하게 보호할 수 있습니다.

다시 말해, 브랜치를 활용하면 변경 사항을 적용할 준비가 완벽하게 되기 전까지 메인 소스 코드에 그 어떤 영향을 주지 않으면서도 다양한 작업을 진행할 수 있습니다.

브랜치를 이용한 작업을 하면 코드베이스를 깔끔하고 일목요연하게 유지할 수 있습니다.

브랜치를 삭제하는 이유

프로젝트에서 코드의 변경 사항을 저장하기 위해 브랜치를 만들었다고 가정해봅시다.

그렇지만 해당 브랜치의 변경 사항이나 새 기능을 프로젝트의 본 버전에 반영 완료한 후에는 해당 브랜치를 유지할 필요가 없어집니다. 따라서 프로젝트 저장소가 복잡해지지 않도록 작업이 완료된 브랜치는 삭제하는 것이 일반적입니다.

로컬 브랜치 삭제하기

로컬 브랜치는 작업자 본인의 컴퓨터에 있는 브랜치이기 때문에 원격 브랜치에 영향을 끼치지 않습니다.

로컬 브랜치를 삭제하는 명령어는 다음과 같습니다.

git branch -d <로컬 브랜치 이름> 
  • git branch는 로컬 브랜치를 삭제하는 명령어입니다.
  • -d--delete의 약자이며 위 명령어에 추가할 수 있는 선택적 플래그입니다. 무언가를 삭제하고 싶다는 의미를 담고 있는 플래그입니다.
  • <로컬 브랜치 이름>은 삭제하고 싶은 로컬 브랜치를 가리킵니다.

예시를 통해 git branch 명령어 활용법을 더 자세히 살펴봅시다.

우선 로컬 브랜치 목록을 확인하기 위해 다음 명령어를 사용합니다.

git branch 

이 예시에는 main, test2라는 두 로컬 브랜치가 있습니다. (*)는 현재 test2 브랜치에서 작업 중이라는 것을 의미합니다.

 명령어 사용 후 나타나는 화면

이때 test2 브랜치를 삭제하고 싶어도 현재 작업 중인 브랜치는 삭제할 수 없습니다.

삭제를 시도하면 다음과 같은 에러가 발생합니다.

현재 작업 중인 브랜치를 삭제할 때 보여지는 에러 메시지

따라서 로컬 브랜치를 삭제하기 전에 git checkout 명령어를 사용해 삭제 대상이 아닌 다른 브랜치로 전환해야 합니다.

git checkout <브랜치 이름>
  • <브랜치 이름>은 전환하고 싶은 브랜치입니다
  • main 브랜치로 전환하려면 명령어가 다음과 같습니다.
  • git checkout main

명령어를 실행하면 다음과 같은 메시지가 나타납니다.

 실행 후 나타나는 메시지

이제 원하는 브랜치를 삭제할 수 있습니다.

브랜치 삭제 후 나타나는 메시지

브랜치에 병합되지 않은 변경 사항 및 푸시되지 않은 커밋이 있는 경우 -d 플래그를 사용해 로컬 브랜치를 삭제할 수 없습니다.

브랜치가 가지고 있는 커밋이 다른 브랜치 혹은 저장소에 기록되어 있지 않을 경우, 커밋 기록이 실수로 손실되는 것을 Git이 방지하기 때문입니다.

만일 이러한 상황에서 git branch -d 명령어를 실행하면 다음과 같은 에러가 발생합니다.

병합되지 않은 커밋을 저장한 브랜치를 삭제할 때 나타나는 에러 메시지

따라서 해당 브랜치를 삭제하려면 에러 메시지에 제시된 것처럼 -D 플래그를 사용해야 합니다.

git branch -D <로컬 브랜치 이름>

대문자 "D"가 있는 -D 플래그는 --delete --force(강제 삭제)의 줄임말이며, 병합 여부와 관계없이 로컬 브랜치를 강제로 삭제합니다.

브랜치 삭제 여부를 재확인하는 절차가 따로 없으므로 이 명령어는 주의해서 사용해야 합니다.

로컬 브랜치를 확실히 삭제하려는 경우에만 사용해야 한다는 점을 잊지 마세요.

다른 브랜치로 변경 이력을 병합하거나 코드 베이스의 원격 브랜치로 푸시하지 않은 상태에서 로컬 브랜치를 삭제하면 변경 사항이 손실될 위험이 있습니다.

 명령어를 실행한 화면

원격 브랜치 삭제하기

원격 브랜치와 로컬 브랜치는 독립적인 별개의 개체입니다.

작업자의 컴퓨터에 저장되어 있는 로컬 브랜치와 달리, 원격 브랜치는 원격 서버에 저장되어 있으며 원격 서버를 통해 접근할 수 있습니다.

원격 브랜치를 삭제하는 명령어는 다음과 같습니다.

git push <원격 저장소 이름> -d <원격 브랜치 이름>
  • 로컬 브랜치를 삭제하는 git branch 명령어를 사용하는 대신 git push 명령어를 이용해 원격 브랜치를 삭제해야 합니다.
  • git push 명령어 다음에 원격 저장소의 이름을 전달해야 합니다. 대부분은 origin입니다.
  • -d 플래그는 삭제라는 의미를 가진 --delete의 줄임말입니다.
  • <원격 브랜치 이름>은 삭제하고 싶은 원격 브랜치입니다.

예시를 통해 원격 브랜치를 삭제하는 과정을 살펴봅시다.

원격 브랜치 목록을 확인하려면 다음과 같은 명령어를 사용해야 합니다.

git branch -a

-a 플래그(모두란 의미를 가진 --all의 줄임말)를 사용하면 로컬, 원격 브랜치를 모두 확인할 수 있습니다.

 명령어 실행 후 나타나는 화면

위의 예시에서는 main, test2라는 두 개의 로컬 브랜치와 origin/main, origin/test2라는 두 개의 원격 브랜치가 있다는 것을 확인할 수 있습니다.

--remotes의 줄임말인 -r 플래그를 사용하면 원격 저장소만 확인할 수 있습니다.

git branch -r 명령어를 실행한 후 보이는 화면

origin/test2 브랜치를 삭제하길 원한다면 다음과 같은 명령어를 사용해야 합니다.

git push origin -d test2

다음과 같은 메시지가 보일 거예요.

원격 브랜치 삭제 후 보이는 메시지

이렇게 origin 저장소에 있는 test2 브랜치가 삭제되었습니다!

git branch -r 명령어를 사용해 origin/test2 원격 저장소가 브랜치 목록에 더 이상 보이지 않다는 걸 확인할 수 있습니다.

업데이트 된 원격 브랜치 목록

마치며

이렇게 로컬, 원격 브랜치 삭제하는 방법을 배워보았습니다!

Git에 대해 더 알고 싶다면, freeCodeCamp의 유튜브 채널에서 다음과 같은 강의를 볼 수 있습니다.

이 기사를 읽어주셔서 감사하고 즐거운 학습 되시길 바랍니다!