LainyZine: 프로그래머 가이드 🐣

Git 저장소에서 빈 고아 브랜치를 만드는 방법

Git 저장소에서 브랜치를 새로 만들면 현재 HEAD 위치에서 새로운 브랜치를 만들어줍니다. 상황에 따라서 완전히 고립된 특수한 브랜치를 만들고 싶은 경우가 있을 수 있습니다. 이 기법을 사용하면 마치 하나의 저장소를 2개 이상의 저장소처럼 사용할 수 있습니다. 이런 브랜치를 고아(orphan) 브랜치라고 부릅니다. 이 글에서는 고아 브랜치를 만드는 방법에 대해서 소개합니다.

고아 브랜치를 만드는 방법

간단한 예제를 통해 고아 브랜치 만드는 과정을 살펴보겠습니다. 먼저 git init으로 빈 Git 저장소를 하나 초기화하고, 커밋을 하나 추가합니다.

$ mkdir git-orphan-branch
$ cd git-orphan-branch
$ git init
$ touch .gitignore
$ git add .
$ git commit -m'Initialize repository'

이 커밋이 저장소의 최초 커밋 혹은 root 커밋이 됩니다. 이제 모든 커밋을 따라 올라가면 이 루트 커밋까지 만나게 됩니다.

이 상태에서 git checkoutorphan 옵션을 사용하면 완전히 고아 브랜치를 만들 수 있습니다.

$ git checkout --orphan empty

고아 브랜치 empty를 생성하고 체크아웃합니다. git log 명령어로 정말로 고립되어있는 브랜치인지 확인해봅니다.

$ git log
fatal: your current branch 'empty' does not have any commits yet

앞에서 커밋한 내용이 나타나지 않고, 현재 브랜치에 아직 커밋이 없다는 메시지가 출력됩니다. lsgit status로 현재 저장소의 상태를 확인해봅니다.

$ ls -al
.git .gitignore

$ git status
On branch empty

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   .gitignore

master 브랜치에서 커밋한 .gitignore 파일이 Index(스테이지 상태)에 남아있는 것을 확인할 수 있습니다. 비어있는 브랜치를 만들어야하므로 기존 파일들은 모두 Index에서 제외시키고, 삭제하겠습니다.

$ git rm --cached -r .
$ git clean -f

rm -rf .으로 파일들을 삭제해도 됩니다만, Git 저장소에서 관리되지 않는 파일까지 전부 삭제되어버리므로, git rmgit clean을 사용하는 게 좀 더 안전합니다.

저장소가 비어있는 상태에서 첫 커밋을 해보겠습니다. allow-empty 옵션을 사용하면 변경 사항 없이 커밋할 수 있습니다.

$ git commit --allow-empty -m "First commit"
[empty (root-commit) e154d9b] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 REAMDE.md

커밋 내용을 보면 이 커밋도 루트 커밋으로 커밋된 것을 알 수 있습니다.

즉, 이 저장소에는 루트 커밋이 2개입니다. 이제 master와 empty 브랜치는 서로 다른 루트 커밋을 가지고 있습니다. 이를 통해 하나의 저장소를 마치 저장소 2개처럼 사용할 수는 있습니다만, 헷갈리기 때문에 꼭 필요한 경우가 아니면 고아 브랜치는 사용하지 않는 것을 추천합니다.

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.