Github에 계속 작업을 하다보니 한번 정리해보면 좋겠다는 생각에 작성합니다.
본 필자는 Mac 환경에서 작업하고 있음을 알립니다.
이번 포스트는
Branch에 대해 알아봅시다.
우리가 작업을 하다보면은 프로젝트는 개념적으로 거대한 나무입니다.
이러한 의미에서 각 분기를 뜻하는 것은Git에서Branch입니다.
또한 분기라는 개념을 통해서 프로젝트의 소스코드를 다양한 버전으로 손 쉽게 작업할 수 있고,
새로운 기능 개발 혹은 수정의 경우 기존 코드를 보존하면서 새로운 분기에서 작업할 수 있습니다.
Git branch전략 중우아한형제들 기술블로그에 정의된Git Flow전략을 설명하려한다.
위 사진을 보면 브랜치에 따라서main,release,hotfix,develop,feature등
많은 브랜치 등이 있는 것을 볼 수 있다.
각 브랜치 마다 용도가 다르며, 그렇다는 뜻은 다른 사람과 작업을 할 때 병렬적 작업을 할 수 있어
역할을 분배하여 작업할 수 있다는 것을 알 수 있다.
그렇기에 브랜치 전략을 활용한다는 것은 다른 팀원과 효율적으로 작업을 할 수 있다는 것을 뜻한다.
나눠진 브랜치마다 어떤 역할을 하는지 알아보자.
main은 쉽게 말해 바로 출시 가능한 코드만 모아두는 브랜치라고 생각하면 된다.
따라서 바로 배포 가능한 코드를 모아두어야 하며
각 버전을 태그를 이용해 표시한다.
- 즉 출시 가능한 프로덕션 코드만 모아두는 메인 브랜치
develop(dev)에서는 다음 버전 개발을 위한 코드를 모아두는 브랜치이다.
- 다음 버전 개발을 위한 코드를 모아두는 브랜치
develop 브랜치와 다르게
Feature에서는 세분화하여 한 기능을 개발하기 위한 브랜치이다.
Develop 아래 Feature branch를 생성하며 기능 개발 후에 다시 Devleop으로Marge한다.
그리고 이름을 지을 때feature/기능 name으로 생성한다.
- 하나의 기능 개발을 위한 브랜치
Release에서는 내가 만든 소프트웨어의 배포를 준비하기 위한 브랜치이다.
Develop 아래 생성하며 버전 이름 등의 데이터를 수정하거나 배포 전 사소한 버그를 수정하기 위해 사용된다.
배포 준비 완료 시 Main 과 Develop 모두 Merge를 한다.
- 소프트웨어 배포를 준비하기 위한 브랜치
이미 배포된 소프트웨어에 문제가 생겼다면 이
Hotfx브랜치를 사용한다.
Main 아래 생성을 하며 문제가 해결되면 다시 Main과 Develop에 Merge를 한다.
- 이미 배포된 버전에 문제가 발생할때 사용하는 브랜치
그렇다면 이제
Branch Merge(병합)에 대해 궁금해 질 것이다.
브랜치를 세분화해서 생성하다 보면 해당 기능을 만들었을 때 상위 디렉토리와 합쳐야 할 상황이 나올 것이다.
이때 해야하는 작업이Merge이며 상위 브랜치와 충돌이 나지 않게 주의하며 합쳐야 한다.
현재 프로젝트의 분기를 알아내는 명령어
- git branch
새로운 분기를 생성하는 브랜치 생성
- git checkout -b [생성할 브랜치 이름]
분기를 이동하는 명령어
- git checkout [이동할 브랜치]
위 사진을 보면 git branch가main이였는데checkout을 통해develop으로 이동한 것을 확인 할 수 있다.
직전 분기로 이동하는 명령어
- git checkout -
브랜치 병합
- git merge [병합 브랜치]
브랜치의 변경 정보를 함축해서 보여주는 명령어
- git log --online
다른 사람의 브랜치를 업데이트를 해서 가져와야 할 때
- git pull [가져올 branch 이름]
pull이란?
협업을 하고 있다고 가정을 하고
만약 내 팀원이 같은 브랜치에서 작업을 하고 있을 때 업데이트 된 내용에 대해서는
git pull을 통해 땡겨와야 한다.
그 때 사용하는 것이pull이며 github에 올라가 있는 프로젝트 변경사항을 자동으로 병합해준다.
tip. 만약 내가 작업한 work flow를 보고싶다면
- git log --pretty=format:"%h = %an , %ar : %s" --graph
커밋을 로그를 확인하는 명령어 이다.
여기서는 내가 브랜치를 생성하고 병합한 과정과 그에 해당하는 커밋들을 보여준다.
tip. 내가 한 커밋에 대해 되돌리고 싶다면
- git reset --soft HEAD^
위 명령어를 작성하면 마지막 커밋을 되돌려준다.
이렇게
branch에 대해서 알아봤는데
해당 필자는 git flow 전략만 사용해봤으며 이외에 다른 전략은 다음 포스트에서 다뤄보겠다.
또한merge충돌 시에 대책 등을 정리해봐도 괜찮겠다.
다음 프로젝트의 성공을 위해 잘 기억해야겠다. 👊