Close

Git 브랜치

이 문서에는 git branch 명령에 대한 심층적인 설명과 전체 Git 브랜칭 모델에 대한 설명이 포함되어 있습니다. 브랜칭은 대부분의 최신 버전 제어 시스템에서 사용할 수 있는 기능입니다. 다른 VCS에서의 브랜칭은 시간과 디스크 공간 모두에서 비용이 많이 드는 작업일 수 있습니다. Git에서 브랜치는 일상적인 개발 프로세스의 한 부분입니다. Git 브랜치는 사실상 변경 사항의 스냅샷을 가리키는 포인터입니다. 새 기능을 추가하거나 버그를 수정하려는 경우(얼마나 크거나 작은지에 상관없이) 새 브랜치를 만들어 변경 사항을 캡슐화합니다. 그러면 불안정한 코드를 메인 코드베이스에 병합하는 것이 더 어려워지고 메인 브랜치에 병합하기 전에 향후의 기록을 정리할 수 있는 기회가 주어집니다.


이 문서에는 git branch 명령에 대한 심층적인 설명과 전체 Git 브랜칭 모델에 대한 설명이 포함되어 있습니다. 브랜칭은 대부분의 최신 버전 제어 시스템에서 사용할 수 있는 기능입니다. 다른 VCS에서의 브랜칭은 시간과 디스크 공간 모두에서 비용이 많이 드는 작업일 수 있습니다. Git에서 브랜치는 일상적인 개발 프로세스의 한 부분입니다. Git 브랜치는 사실상 변경 사항의 스냅샷을 가리키는 포인터입니다. 새 기능을 추가하거나 버그를 수정하려는 경우(얼마나 크거나 작은지에 상관없이) 새 브랜치를 만들어 변경 사항을 캡슐화합니다. 그러면 불안정한 코드를 메인 코드베이스에 병합하는 것이 더 어려워지고 메인 브랜치에 병합하기 전에 향후의 기록을 정리할 수 있는 기회가 주어집니다.

Git 브랜치
콘솔 창
관련 자료

고급 Git 로그

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

위의 다이어그램은 두 개의 분리된 개발 라인이 있는 리포지토리를 시각화합니다. 하나는 소규모 기능을 위해, 다른 하나는 장기적으로 실행되는 기능을 위한 것입니다. 브랜치에서 개발하면 둘 다 동시에 작업할 수 있을 뿐만 아니라 main 브랜치에 의심스러운 코드가 없도록 합니다.

Git 브랜치의 기본 구현은 다른 버전 제어 시스템 모델보다 훨씬 가볍습니다. Git은 디렉터리에서 디렉터리로 파일을 복사하는 대신 브랜치를 커밋에 대한 참조로 저장합니다. 이러한 의미에서 브랜치는 커밋을 위한 컨테이너가 아니라 커밋의 끝을 나타냅니다. 브랜치의 기록은 커밋 관계를 통해 추정됩니다.

이 글을 읽으면서 Git 브랜치는 SVN 브랜치와 다르다는 점을 기억하세요. SVN 브랜치는 가끔 발생하는 대규모 개발 작업을 캡처하는 데만 사용되는 반면 Git 브랜치는 일상 워크플로의 필수적인 부분입니다. 다음 콘텐츠에서는 내부 Git 브랜칭 아키텍처를 자세히 살펴보겠습니다.

작동 방식


브랜치는 독립적인 개발 라인을 나타냅니다. 브랜치는 편집/스테이지/커밋 프로세스에 대한 추상적 개념입니다. 새로운 작업 디렉터리, 스테이징 영역 및 프로젝트 기록을 요청하는 방법으로 간주할 수 있습니다. 새 커밋은 현재 브랜치 기록에 기록되며, 그 결과 프로젝트의 기록에 포크가 발생합니다.

git branch 명령을 사용하면 브랜치를 만들고 나열하고 이름을 변경하고 삭제할 수 있습니다. 브랜치 간에 전환하거나 포크된 기록을 다시 통합할 수는 없습니다. 이러한 이유로 git branchgit checkoutgit merge 명령과 긴밀하게 통합되어 있습니다.

일반적인 옵션


git branch

리포지토리의 모든 브랜치를 나열합니다. git branch --list와 같습니다.

git branch <branch>

<branch>라는 새 브랜치를 만듭니다. 이 작업은 새 브랜치를 체크아웃하지 않습니다.

git branch -d <branch>

지정한 브랜치를 삭제합니다. Git에서는 병합되지 않은 변경 사항이 있는 경우 브랜치를 삭제하지 못하도록 한다는 점에서 이는 “안전한” 작업입니다.

git branch -D <branch>

병합되지 않은 변경 사항이 있더라도 지정된 브랜치를 강제로 삭제합니다. 특정 개발 라인과 관련된 커밋을 모두 영구적으로 버리고 싶을 때 사용하는 명령입니다.

git branch -m <branch>

현재 브랜치의 이름을 <branch>로 변경합니다.

git branch -a

원격 브랜치를 모두 나열합니다.

브랜치 만들기


브랜치는 커밋에 대한 포인터일 뿐이라는 점을 이해해야 합니다. 브랜치를 만들 때 Git은 새 포인터만 만들면 되며 리포지토리를 다른 방식으로 변경하지 않습니다. 시작할 때의 리포지토리는 다음과 비슷할 것입니다.

브랜치가 없는 리포지토리

이제 다음 명령을 사용하여 브랜치를 만듭니다.

git branch crazy-experiment

리포지토리 기록은 변경되지 않고 그대로 유지됩니다. 현재 커밋에 대한 새로운 포인터만 얻게 됩니다.

새 브랜치 만들기

참고로 이 작업은 새 브랜치를 만들기만 합니다. 커밋을 추가하려면 git checkout으로 커밋을 선택한 다음 표준 git addgit commit 명령을 사용해야 합니다.

원격 브랜치 만들기


지금까지의 예시는 모두 로컬 브랜치 작업을 보여줬습니다. git branch 명령은 원격 브랜치에서도 작동합니다. 원격 브랜치에서 작업하려면 먼저 원격 리포지토리를 구성하고 로컬 리포지토리에 추가해야 합니다.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo

이 명령은 로컬 브랜치 crazy-experiment의 복사본을 원격 리포지토리 <remote>로 푸시합니다.

브랜치 삭제


브랜치 작업을 마치고 메인 코드베이스에 병합한 후에는 기록 손실 없이 브랜치를 자유롭게 삭제할 수 있습니다.

git branch -d crazy-experiment

하지만 브랜치가 병합되지 않으면 위의 명령에서 오류 메시지가 출력됩니다.

error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

이것은 전체 개발 라인에 대한 액세스 권한을 잃지 않도록 합니다. 정말로 브랜치를 삭제하고 싶은 경우(예: 실패한 실험) 대문자 -D 플래그를 사용하면 됩니다.

git branch -D crazy-experiment

그러면 상태에 관계없이, 그리고 경고 없이 브랜치가 삭제되므로 신중하게 사용하세요.

이전 명령은 브랜치의 로컬 복사본을 삭제합니다. 브랜치가 원격 리포지토리에 아직 있을 수도 있습니다. 원격 브랜치를 삭제하려면 다음을 실행합니다.

git push origin --delete crazy-experiment

또는

git push origin :crazy-experiment

이렇게 하면 원격 원본 리포지토리에 대한 삭제 신호가 푸시되어 원격 crazy-experiment 브랜치의 삭제를 트리거합니다.

요약


이 문서에서는 Git의 브랜칭 동작과 git branch 명령에 대해 살펴봤습니다. git branch 명령의 주요 기능은 브랜치를 만들고 나열하고 이름을 변경하고 삭제하는 것입니다. 그 결과로 생기는 브랜치에서 더 많은 작업을 하기 위해 이 명령은 보통 git checkout과 같은 다른 명령과 함께 사용됩니다. 브랜치 전환 및 브랜치 병합과 같은 git checkout 브랜치 작업에 대한 자세한 내용은 git checkout 페이지에서 확인하세요.

다른 VCS에 비해 Git의 브랜치 작업은 비용이 저렴하고 자주 사용됩니다. 이러한 유연성 덕분에 Git 워크플로를 효율적으로 사용자 지정할 수 있습니다. Git 워크플로에 대한 자세한 내용은 확장된 워크플로 설명 페이지인 기능 브랜치 워크플로, GitFlow 워크플로, 포킹 워크플로를 참조하세요.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up