지금까지 git으로 작업을 하면서 'branch를 생성한다'는 말을 '일종의 새로운 물리적인 작업구역'을 생성한다는 말로 이해해왔었다. 다시 말해, 완성하고자 하는 프로젝트 디렉토리에 새로운 폴더(브랜치)를 만들어서 그곳에서 작업을 하는 것으로 여겼다는 것이다.
그도 그럴 것이 대부분의 프로젝트를 기능별로 구분하여 기능의 이름을 딴 브랜치를 생성하고, 그것을 메인 브랜치에 병합시키는 방식으로 진행을 해왔으니까. 그런 관점에서 보자면 브랜치를 '작업구역'으로 인식하는 것도 전혀 틀린 것은 아니다.
하지만 '현시점'에서의 이해를 바탕으로 하자면 브랜치는 그런식으로 활용이 가능한 것이지, 브랜치의 원래의 용도가 그런 것은 아닌 것 같다.
최근에 브랜치의 진짜 의미에 대해서 가장 근접하다고 생각하는 비유를 들었는데 '특정 시점을 기록해두기 위한 핀'이라는 것이었다.
즉, 이전에는 특정 브랜치에서 작업을 하다가 문제가 생기면, 돌아가고 싶은 특정 시점에 대해서 기억력에 의존하여 '새로 생긴 코드가 어떤 것들이고', '새로 만든 파일은 어떤 것들이고', '삭제한 파일은 어떤 것들인지'를 직접 손으로 반영할 생각을 했는데 그건 git으로 작업하는 의의 자체를 무시하는 행위였다. 돌아가고 싶은 시점의 브랜치로 checkout하거나, 돌아가고 싶은 시점의 commit 포인트로 돌아가면 되는 것임을 이제야 알게 됐다.