만약 저와 같이 적극적으로 Git을 사용하는 사용자라면, 옛 브랜치들이 쌓여있을 것입니다. 병합된 것도 있고, 버려진 것도 있으며, 만들었다는 것조차 기억나지 않는 것도 있을 것입니다. 이러한 브랜치들을 유지하는 것은 큰 문제처럼 보이지 않을 수 있지만, 시간이 지남에 따라 리포지토리를 혼란스럽게 만들고 활성 작업을 추적하기 어렵게 할 수 있습니다.
본 안내서에서는 로컬 및 원격 Git 브랜치를 삭제하는 방법에 대해 안전하게 설명하고, 주의해야 할 잠재적인 함정을 다루겠습니다.
Git 브랜치를 삭제하는 것은 무엇을 의미하나요?
Git 브랜치는 일시적으로 설계되었습니다. 새로운 기능, 버그 수정 또는 실험을 수행할 공간을 제공하면서 주 코드베이스와 간섭하지 않게 합니다. 그러나 한 번 브랜치가 목적을 달성하면, 그것을 유지하는 것은 불필요한 혼란만을 더합니다. 브랜치를 삭제하는 것은 Git 작업 흐름을 깔끔하고 효율적으로 유지하기 위한 좋은 정리라고 생각합니다.
저는 “브랜치를 삭제하는 것”은 작업을 “지우는 것”과 같지 않다는 점을 강조하고 싶습니다. Git에서 브랜치를 삭제할 때 커밋을 지우는 것이 아니라 그들을 참조하는 레퍼런스만을 제거하는 것입니다. 작업 방식은 다음과 같습니다:
- 로컬 브랜치를 삭제하면 해당 브랜치가 개인 저장소에서 제거됩니다. 다른 브랜치나 태그가 해당 커밋을 참조하지 않으면, 이후 Git의 가비지 컬렉션에 의해 정리될 수 있습니다.
- 원격 브랜치 삭제은 공유 저장소(예: GitHub, GitLab, Bitbucket)에서 브랜치를 제거하여 공동 작업자들이 해당 브랜치에 접근할 수 없게 합니다. 그러나 다른 기기에 있는 해당 브랜치의 로컬 사본은 수동으로 제거하거나 업데이트될 때까지 남아 있습니다.
브랜치를 삭제하는 이유?
브랜치를 삭제하는 것은 간단하고 청소의 일환이다. 중복된 사진, 오래된 다운로드 및 구식 폴더를 삭제하는 것이 좋은 습관인 것처럼, 사용이 끝난 브랜치를 삭제하는 것이 좋은 이유는 여러 가지가 있습니다:
- 저장소를 깨끗하게 유지합니다. 특히 오래된 브랜치가 많을수록 활성 작업을 추적하기 어려워집니다.
- 혼란을 방지합니다. 더 이상 관련이 없는 브랜치가 남아 있으면 해당 브랜치가 여전히 사용 중인지에 대한 불확실성을 야기할 수 있습니다.
- 협업을 향상시킵니다. 팀 환경에서 완료된 기능 브랜치를 삭제하면 작업이 완료되었음을 신호하고 오래된 코드에 대한 불필요한 작업을 방지합니다.
- 원격 저장소의 불필요한 용량을 줄입니다.원격 저장소는 오래된 브랜치로 인해 어수선해질 수 있으며, 이는 프로젝트 이력을 탐색하기 어렵게 만듭니다.
Git을 처음 사용하거나 브랜치를 관리하기 전에 설정해야 하는 경우, 단계별 지침을 위한 Git 설치 튜토리얼을 확인하세요.
로컬 Git 브랜치 삭제
로컬 브랜치를 삭제하는 것은 어렵지 않습니다. 다행히도, 이는 비교적 간단한 Git 작업 중 하나입니다. 안전하게 삭제하는 방법과 주의할 점을 살펴보겠습니다.
로컬 브랜치를 삭제하는 기본 명령
로컬 브랜치를 삭제하는 안전한 방법은 -d
플래그를 사용하는 것입니다:
git branch -d <branch_name>
이 명령은 브랜치가 현재 브랜치(main 또는 master 같은)에 완전히 병합된 경우에만 작동한다는 점을 명심하세요. 병합되지 않은 변경 사항이 있으면 Git은 실수로 데이터를 손실하는 것을 방지하기 위해 중단시킬 것입니다.
로컬 브랜치 강제 삭제하기
아직 병합되지 않은 변경 사항이 있는 브랜치를 삭제하려고 하면 Git이 강제로 삭제하지 않는 한 허용하지 않습니다:
git branch -D <branch_name>
-D
플래그(대문자임에 유의)는 안전 검사를 건너뛰고 즉시 브랜치를 삭제합니다. 병합되었는지 여부와 관계없이 삭제됩니다. 이에 대해 신중히 고려하는 것이 좋습니다. 병합되지 않은 작업은 백업이나 동일한 커밋을 가리키는 다른 브랜치가 있는 경우에만 보존됩니다.
삭제 전 병합되지 않은 변경 사항 확인하기
브랜치를 삭제하기 전에 브랜치에 병합되지 않은 변경 사항이 있는지 확인하는 것이 좋습니다. 다음 명령으로 확인할 수 있습니다:
git branch --no-merged
위의 명령은 현재 브랜치로 병합되지 않은 모든 브랜치를 나열합니다. 삭제하려는 브랜치가 이 목록에 표시되는 경우, 진행하기 전에 해당 변경 사항이 필요하지 않은지 다시 확인하십시오.
Git 명령어에 대한 빠른 참조 및 브랜치 삭제를 포함한 것을 찾고 계십니까? 편리한 Git Cheat Sheet를 다운로드하십시오.
원격 Git 브랜치 삭제
원격 브랜치를 삭제하는 것은 로컬 브랜치를 삭제하는 것과 약간 다릅니다. 원격 브랜치는 공유 저장소에 존재하기 때문에 이들을 제거하면 조직을 유지하고 오래된 브랜치가 팀의 작업 흐름을 혼란스럽게 만드는 것을 방지할 수 있습니다.
원격 브랜치를 삭제하는 기본 명령어
Github, GitLab 또는 Bitbucket과 같은 원격 저장소에서 브랜치를 삭제하려면 다음을 사용하십시오:
git push origin --delete <branch_name>
이 명령은 원격 저장소에서 브랜치 참조를 제거하여 다른 사람들이 액세스할 수 없게 만듭니다. 그러나 다른 기기의 로컬 브랜치 사본은 영향을받지 않습니다. 이들은 별도로 정리해야 합니다.
원격 브랜치 삭제 확인
원격 브랜치를 삭제한 후에는 실제로 삭제되었는지 확인해야 합니다. 먼저 원격 저장소에서 최신 업데이트를 가져옵니다:
git fetch --prune
이는 오래된 원격 추적 참조를 제거합니다. 브랜치가 더 이상 나열되지 않았는지 확인하려면 다음을 실행하세요:
git branch -r
위의 명령은 모든 남아있는 원격 브랜치를 표시합니다. 삭제된 브랜치가 여전히 표시되면 다른 git fetch --prune
을 실행하거나 삭제 명령이 올바른 원격에서 실행되었는지 확인하세요.
Git 브랜치 삭제를 위한 모범 사례
브랜치를 삭제하는 것은 Git을 사용할 때의 루틴적인 부분이지만, 올바르게 수행하면 불필요한 머리 아픔을 피할 수 있습니다. 리포지토리를 정리하고 잠재적인 실수를 피하기 위한 몇 가지 모범 사례를 소개합니다.
미결합된 브랜치를 너무 일찍 삭제하지 않는 것이 좋습니다
브랜치를 삭제하기 전에, 여전히 필요한 미결합된 작업이 있는지 확인하세요. 확신이 없으면 다음 명령어로 상태를 확인하세요:
git branch --no-merged
아직 병합되지 않은 중요한 변경 사항이 있는 경우, 그것들을 바로 삭제하는 대신 먼저 병합하거나 보관하는 것을 고려해보세요.
병합 후 삭제
기능 또는 수정이 주 브랜치(main
또는 master
)에 병합되면 이전 브랜치를 유지할 이유가 없습니다. 병합된 브랜치를 삭제하면 혼란을 방지하고 아직 활성 상태인 브랜치를 쉽게 확인할 수 있습니다.
팀과 소통하기
협업 프로젝트를 진행할 때는 팀에 경고 없이 브랜치를 삭제하는 것을 피하세요. 이는 혼란을 초래하거나 누군가의 작업을 방해할 수 있습니다. 원격 브랜치를 삭제하기 전에 팀과 상의하여 누구도 여전히 사용 중이지 않은지 확인하세요. 답답함을 방지하기 위해 간단한 Slack 메시지나 노트를 선호합니다.
브랜치를 삭제하기 전에 커밋 히스토리를 정리하여 커밋을 스쿼시하는 것이 좋습니다. 저희의 Git Squash Commits 튜토리얼에서 학습하세요.
Git 브랜치를 삭제할 때 발생할 수 있는 일반적인 문제들
Git에서 브랜치를 삭제하는 것은 일반적으로 문제가 없지만, 몇 가지 주의해야 할 일반적인 함정이 있습니다. 주의해야 할 사항과 이러한 문제가 발생할 경우 어떻게 처리해야 하는지 알아봅니다.
완전히 병합되지 않은 브랜치를 삭제하는 것
다시 말해, git branch -d
를 사용하여 아직 병합되지 않은 변경 사항이 있는 브랜치를 삭제하려고 하면 Git이 잠재적인 데이터 손실을 방지하기 위해 여러분을 멈출 것입니다. 이것은 안전장치입니다. -D
를 사용하여 강제로 삭제하면 아직 병합되지 않은 작업이 손실됩니다.
이미 브랜치를 삭제했고 다시 필요하다고 깨달았다면, Git의 reflog
를 사용하여 복구할 수도 있습니다:
git reflog git checkout -b <branch_name> <commit_hash>
이를 통해 쓰레기 수집에 완전히 손실되지 않은 경우 브랜치를 마지막으로 알려진 커밋에서 복원할 수 있습니다.
현재 브랜치 삭제하기
현재 사용 중인 브랜치를 삭제할 수 없습니다. 그렇지 않으면 활성 브랜치가 없어질 것입니다. 브랜치를 삭제하려고 할 때 오류가 발생하면 다른 브랜치로 전환하세요:
git checkout main
또는 Git 2.23+를 사용하는 경우:
git switch main
다른 브랜치로 전환한 후에 의도한 브랜치를 안전하게 삭제할 수 있습니다.
하나를 삭제하기 전에 브랜치를 전환해야 하는 경우? Git에서 원격 브랜치를 확인하는 방법은 다음과 같습니다. Git에서 원격 브랜치 확인하기 당신을 안내해 드립니다.
원격 브랜치를 실수로 삭제한 경우
원격 브랜치가 실수로 삭제된 경우(아직 로컬 복사본이 있는 경우), 다시 푸시하여 복원할 수 있습니다:
git push origin <deleted_branch_name>
이렇게 하면 원격 저장소에 브랜치가 다시 만들어져 협업자들의 액세스가 복원됩니다. 로컬 복사본이 없는 경우 커밋 기록을 수동으로 확인하고 브랜치를 다시 만들어야 할 수 있습니다.
Git 브랜치를 삭제할 수 없는 이유는 무엇일까요?
Git에서 브랜치를 삭제하는 데 문제가 있는 경우, 일반적인 문제를 다시 살펴보세요; 완전히 병합되었는지, 현재 해당 브랜치에 있는지, 또는 원격 브랜치인지 확인하세요. 여기서부터는 설정이나 권한일 수 있습니다.
- 먼저 확인해야 할 사항은 현재 해당 브랜치에 있는지 여부입니다. Git은 현재 활성화된 브랜치를 삭제할 수 없으므로 먼저 다른 브랜치로 전환해야 합니다.
- 만약 그게 문제가 아니라면, 해당 브랜치에 아직 병합되지 않은 변경 사항이 남아 있을 수 있습니다. Git은 병합되지 않은 작업으로 보호하기 때문에 해당 변경 사항이 필요 없다고 절대 확신이 서지 않는 한, 해당 브랜치를 병합하거나 강제로 삭제해야 할 것입니다.
git branch -D branch-name
을 사용하여 브랜치를 강제로 삭제할 수 있습니다. - 원격 브랜치를 삭제하려면 간단한
git branch -d
명령어만으로는 해결되지 않습니다. 대신git push origin --delete branch-name
을 실행해야 하며, 이전 참조를 정리하려면git fetch --prune
을 사용할 수 있습니다. - 특히 GitHub 또는 GitLab과 같은 플랫폼에 호스팅된 일부 저장소에는 설정을 변경하지 않고 삭제할 수 없는 보호된 브랜치가 있을 수 있습니다. 공유 저장소에서 작업 중인 경우 브랜치를 삭제하려면 적절한 권한이 필요할 수 있습니다.
아직 해결되지 않았나요? git branch -v
를 실행하면 브랜치의 상태에 대한 자세한 정보를 제공하고, 다시 시도하기 전에 상황을 파악하는 데 도움이 될 수 있습니다.
Git를 사용한 브랜치 정리 자동화
나는 좋은 자동화를 좋아합니다. 수동으로 브랜치를 삭제하는 것이 잘 작동하지만, 그 방법을 이해해야 합니다. 팀 설정에서 많은 브랜치를 다루고 있다면, 자동화를 통해 시간을 절약하고 작업을 더 깔끔하게 유지할 수 있습니다. Git은 더 많은 노력 없이 혼란을 줄이고 브랜치 정리를 간소화할 수 있는 몇 가지 방법을 제공합니다.
원격 브랜치 정리 자동화
원격 브랜치가 삭제되면 로컬 Git은 수동으로 업데이트할 때까지 해당 참조를 유지합니다. 하나씩 정리하는 대신 다음을 사용할 수 있습니다:
git fetch --prune
위 명령은 더 이상 원격 저장소에 존재하지 않는 브랜치에 대한 로컬 참조를 자동으로 제거하여 모든 것을 동기화 상태로 유지합니다. 정기적으로 실행하면 로컬 저장소에 오래된 브랜치가 쌓이는 것을 방지할 수 있습니다.
정리를 위해 Git 후크 사용
팀 또는 대규모 프로젝트의 경우, Git 훅을 사용하여 브랜치 정리를 자동화할 수 있습니다. 훅은 Git 워크플로우의 특정 시점에서 실행되는 사용자 지정 스크립트로, 브랜치 병합 후와 같은 시점에서 실행됩니다. 포스트 머지 훅을 구성하여 일정 기간이 지난 후 자동으로 병합된 브랜치를 삭제하도록 설정할 수 있어, 오래된 브랜치가 불필요하게 남아 있는 것을 방지할 수 있습니다.
결론
시간이 지남에 따라 브랜치가 지저분해질 수 있지만, “다듬기”를 조금 해서 깨끗한 리포지토리와 효율적인 워크플로우를 유지할 수 있습니다. 병합된 브랜치를 삭제하는 습관을 들이고, 미병합 브랜치를 재확인하며 팀 프로젝트에서 의사 소통을 유지함으로써 이러한 문제를 피할 수 있습니다. 그리고 한 걸음 더 나아가려면 git fetch --prune
과 Git 훅과 같은 자동화 도구를 사용하여 추가 노력 없이 리포지토리를 깨끗하게 유지할 수 있습니다.
브랜치를 삭제하는 것은 Git을 숙달하기 위한 한 가지 단계에 불과합니다. 버전 관리의 이해를 더 깊이하기 위해 중급 Git 코스를 확인해보세요. GitHub 저장소에서 작업 중이라면, GitHub의 핵심 개념을 확실히 숙지하는 것이 중요합니다. GitHub 개념 소개 코스에서 더 배우세요!