studying data

문제의 본질을 꿰뚫어 해결책을 찾는 법을 공부합니다

콤퓨타 공부/Git

[Git 공부] branch

study_data 2021. 8. 9. 16:39

(참고) 본 게시글은 다른 블로그들의 정보와 수업 내용을 짜집기해 재구성한 것입니다

 

소프트웨어 개발을 할 때 개발자들은 동일한 소스코드를 공유하죠. 동일한 소스코드 위에서 누군가는 버그를 수정하고, 또 누군가는 새로운 코드를 만들어냅니다. 여러 사람이 같은 소스로 작업하기 때문에 다양한 버전의 코드가 만들어질 수 있습니다. 이렇게 여러 개발자가 동시에 다양한 작업을 할 수 있도록 만들어 주는 것이 브랜치의 가장 큰 기능입니다. 작업을 분리하기 때문에 변경한 내용을 쉽게 확인할 수 있고 원래 버전과 비교해서 전혀 다른 새로운 버전을 만들 수 있죠.

 

동시에 이렇게 만들어진 브랜치는 다른 브랜치와 병합(merge)해서 새로운 브랜치로 모을수도 있습니다. 여러 명이 작업할 때는 메인 브랜치를 하나 만들고, 여기에서 자신의 전용 브랜치를 만듭니다. 각자 작업 후 작업이 끝난 사람은 메인 브랜치에 자신의 브랜치를 적용하고, 하나하나 모여 완성됩니다. 이렇게 '작업단위'인 브랜치로 작업을 중간중간 기록하면 문제가 발생했을 때 원인이 되는 작업을 쉽게 찾을 수 있습니다.  

 

master branch


저장소를 처음 만들면 git은 master라는 이름의 브랜치를 만들고, 여기에 파일을 추가, 저장(commit)하는 것은 모두 'master'라는 브랜치를 통해 처리할 수 있는 일이 됩니다. master가 아니라 다른 브랜치에서 작업을 하고 싶다면 그 브랜치를 사용하겠다고 선언(checkout)하면 됩니다. Git에서는 브랜치를 작업에 따라 자유롭게 만들 수 있는데, 미리 팀원들과 브랜치에 대한 기본적인 규칙, 제작 상황 등을 논의하면 좋습니다.

Integration Branch

통합브랜치는 언제든 배포할 수 있는 버전으로 안정적인 상태를 유지하는 게 중요합니다. 만약 이 개발중인 어플리케이션에 문제가 발견돼 버그를 수정하거나 추가할 사항이 생기면 토픽(topic branch)를 만들어낼 수 있습니다. 그리고 통합 브랜치는 저장소를 처음 만들 때 생기는 마스터 브랜치를 통합 브랜치로 사용합니다.

Topic Branch

토픽 브랜치는 앞서 살펴본 것처럼 기능 추가나 버그 수정같은 단위 작업을 위한 브랜치입니다. 여러개의 작업을 동시에 진행할 때 잘 사용할 수 있습니다. 토픽 브랜치는 통합 브랜치에서 만들어지고 여기서 작업이 완료되면 브랜치에 병합됩니다. 그리고 이렇게 병합한 브랜치를 피처 브랜치(Feature branch)라고 합니다.

 

브랜치 전환과 HEAD


Git에서는 작업할 브랜치를 미리 선택해야하는데, 처음 Git을 설치했을 때 만날 수 있는 브랜치가 바로 'master'였죠. 지금 브랜치 말고 다른 브랜치에서 작업을 하고 싶다면 오른쪽 마우스를 클릭하고 '체크아웃' 명령어를 실행해주거나 터미널 창에 checkout이라고 입력해주면 됩니다. 이렇게 체크아웃을 누르게 되면 브랜치 내 마지막 커밋 내용이 작업 트ㄹ리에 펼쳐지고 이후 실행한 커밋은 전환된 브랜치에 추가됩니다.

 

'헤드(HEAD)'는 현재 사용중인 브랜치의 선두부분을 나타내는데 기본적으로는 'master'브랜치의 선두 부분을 나타냅니다. 그런데 커밋하지 않은 변경 내용이나 새로운 추가 내용이 있으면 어떻게 될까요? 이것들을 인덱스와 작업트리에 남겨둔 채 다른 브랜치로 체크아웃하면 그 내용은 기존 브랜치가 아니라 전환된 브랜치에서 커밋할 수 있습니다. 그런데 이전 내용을 커밋하기도 전에 전환된 브랜치에서 수정내용이 있으면 체크아웃이 되지 않을 수 있습니다. 그러니까 커밋된 내용이 있는지 없는지 확인하고, 아직 안 된 부분이 있다면 그것을 커밋해줘야 다음 작업들이 가능하곘죠! 그런데 이미 많은 작업들을 해버렸다면 어떻게 해야 할까요? 이 때 사용할 수 있는 것이 바로 stash입니다. stash는 파일의 변경내용을 일시적으로 다른 영역에 기록, 저장해둠으로써 충돌을 피하도록 돕습니다. 이렇게 저장된 stash는 나중에 다시 불러와서 다른 브랜치나 원래 브랜치에 커밋할 수 있죠!

 

브랜치 통합: MERGE와 REBASE


브랜치를 나눠 작업을 끝냈다면 이제 통합을 해야 할 시간이죠! 여기서 사용할 수 있는 기능이 바로 merge와 rebase입니다. 어느 쪽을 사용하느냐에 따라 통합 후 브랜치 이력이 크게 달라지기 때문에 목적에 따라 두 가지를 선택적으로 사용할 수 있습니다. 먼저 표로 간단한 특성을 확인해주세요. 다음 포스팅은 merge와 rebase에 대해 더 자세한 설명을 정리해보겠습니다!

 

merge rebase
변경 내용 이력이 모두 남아 이력이 복잡해짐 이력은 단순해지나 원래 커밋 이력이 변경됨
정확한 이력을 남겨야하는 경우엔 사용할 수 없음

 

reference

https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://backlog.com/git-tutorial/kr/stepup/stepup2_3.html