브랜치의 개념

지난 강의 요약

  • clone: 원격 저장소 (github) 을 내 컴퓨터에 복사해 온다.
  • add: 내 컴퓨터에서 작업한 파일들을 스테이지에 추가
  • commit: 스테이지에 올라온 파일들을 가지고 내 컴퓨터에 저장 (세이브와 같다.)
  • push: 커밋들을 원격 저장소에 업로드
  • 코드 뭉치 버리기: 마지막 커밋으로 되돌아가고 싶을 때 사용

이번 강의 요약

  • 브랜치 (branch): 기능 변경을 하고 싶을 때 생성 및 사용
  • 머지 (merge): 한 브랜치의 내용을 다른 브랜치에 반영
  • 체크아웃 (checkout): 저장소에서 특정 커밋이나 브랜치로 돌아가고 싶을 때 사용

기능 변경하기

이미 돌아가고 있는 프로그램에서 기능을 바꾸고 싶은 일이 생길 수 있습니다. 그럴 때 어떻게 해야 하나요? 보통 초보 개발자들은 주석을 활용합니다. 돌아가고 있는 부분을 삭제하면 아까우니까 주석 처리하고 개발합니다. 시간이 지나면 코드가 엉망진창으로 짜장짬뽕 믹싱이 되는데 이런 코드를 스파게티 코드라고 하죠. 이런 상황을 막기 위해서 브랜치를 사용할 수 있습니다.

시나리오

  1. 기존 문서에 새로운 설명을 추가했다.
  2. 내용이 맘에 안 들어서 다시 작업을 하고 싶다.
  3. 혹시 모르니 기존 내용은 남겨 두고 싶다.
  4. 새로 작업을 한 후에 비교해 보고 더 좋은 걸 결과물로 반영하자.

현재 상태

현재 폴더에는 hello.md 파일이 있고 커밋까지 되어 있습니다. 커밋 로그는 아래 그림처럼 되어 있습니다. 간단하게 보기 위해서 그림에 보이는 원격 브랜치 체크박스를 해제한 상태입니다.

새로운 브랜치 생성하기

눈치를 챈 분도 있겠지만 사실 우리는 브랜치라는 걸 이미 사용하고 있습니다. 아무 설정도 안 하고 git을 사용하면 위 그림 왼쪽의 굵은 글씨에 보이는 것처럼 master 브랜치라고 하는 기본 브랜치에서 작업을 하게 됩니다. 브랜치가 뭐냐고 물어본다면 가상의 작업 환경입니다. 사실 마스터 브랜치는 사람들과 공유하고 싶은 최종 결과물이 있어야 하는 곳입니다. 브랜치를 새로 생성하면 기존의 마스터 브랜치의 내용은 그대로 보존하면서 새로운 작업 환경을 생성하는 거라고 설명해야 할 것 같네요. 자세한 설명은 나중에 다시 할 예정입니다. 여튼 git에서 가장 중요한 게 커밋이라면 그 다음은 브랜치라고 해도 과언이 아닙니다. 제가 아는 디자이너는 작업을 보존하고 싶을 때 폴더를 하나 생성하더군요. '2018-3-14-모솔-화이트데이-시안2' 이런 식으로요. 그거랑 논리적인 의미는 같습니다. 브랜치의 이름은 일단 새로 구현할 기능 이름으로 합시다. 여기서는 'version2'로 이름을 붙이고, 마지막 커밋의 직전 커밋으로부터 생성을 합니다. 직전 커밋을 선택하고 우클릭 - 브랜치 - 새 브랜치를 선택하고 새로운 브랜치 이름 'version2' 를 입력해서 새로운 브랜치를 생성해 봅시다. 생성 후에는 version2라는 브랜치가 생기는데, 소스트리의 기능으로 자동으로 현재 브랜치가 version2가 됩니다. 왼쪽 메뉴를 보면 version2가 생기고 동그라미와 굵은 글씨로 표시된 걸 볼 수 있습니다. 그리고 오른쪽 커밋 로그를 보면 master보다 한 단계 아래 커밋에 version2가 생긴 것을 볼 수 있습니다.

현재 브랜치 변경하기

깃에서는 한 번에 하나의 브랜치에서만 작업이 가능한데 이를 헤드(HEAD) 브랜치라고 부릅니다.
현재 작업 중인 브랜치 = 헤드 브랜치
지금 헤드 브랜치는 뭘까요? 방금 전에 생성한 브랜치 version2 입니다. 브랜치를 변경하기 위해서는 체크아웃(checkout)이란 명령을 사용합니다. 사실은 아무 커밋으로나 돌아갈 수도 있지만 일단은 브랜치 변경을 위해 사용합니다. 소스트리를 사용하면 정말 쉽게 브랜치 체크아웃을 할 수 있습니다. 왼쪽 메뉴의 브랜치 이름을 더블 클릭만 하면 되죠. 연습 삼아 현재 브랜치를 master로 변경했다 다시 version2로 돌아와 봅시다. 더불어 파일의 내용도 살펴 보세요. 체크 아웃 할 때마다 파일의 내용이 변경되는 것도 볼 수 있습니다! 신기하죠?

새로운 기능 추가하기

다시 version2 브랜치로 돌아와서 이번에는 실제 파일의 내용을 고쳐 봅시다. 편의상 기존의 hello.md 파일에 내용을 추가합니다.

작업후 추가할 내용

## 새로운 브랜치 만들기 

- 원하는 커밋을 만들고 우클릭, 새 브랜치 이름 입력하면 커밋으로부터 브랜치가 생긴다.

## 원하는 브랜치로 돌아가기

- checkout: 왼쪽의 브랜치 메뉴에서 브랜치를 선택하고 더블 클릭하면 해당 브랜치로 돌아간다.
위와 같이 변경한 후에 스테이지에 변경 사항을 올리고 커밋을 하면 새로운 커밋이 하나 생깁니다. 그런데 아래 그림처럼 version2 브랜치만 새로 생긴 커밋을 가르키게 됩니다. 그럼 master 브랜치는요? 예상했을 수도 있지만 변하지 않습니다. 그리고 놀랍게도 가지가 하나 생겨났습니다! 짜잔! 왜 브랜치라고 부르는지 조금 이해가 되죠?

다시 체크아웃 해보기

이제 우리는 두가지 버전이 생겼습니다. master 브랜치 버전과 version2 버전이지요. 각각의 체크아웃하면 각 브랜치의 내용으로 폴더안의 파일이 변합니다. 두 가지를 비교해 보고 고민 후에 최종적으로 하나를 선택하게 되겠죠? 그럴 때 병합을 선택하게 됩니다. 병합은 다음 시간에!