10월 28일 (목) 프로젝트 workflow(브랜치, branch)

Southbig·2021년 10월 28일
0

Fork, clone

Remote에 생성한 프로젝트 Repository를 각자의 Repository로 가져오기

  1. 프로젝트 Remote Repository를 만든다
  2. 팀원들과 함께 나누어 작업을 하기 위해서 각자의 Remote Repository로 Fork를 한다
  3. Local에서 작업하기 위해서 git clone 명령어로 Repository를 Local에 가지고 온다

git checkout, git switch

git checkout -b 새로운 브랜치 이름
git switch -c 새로운 브랜치 이름

브랜치를 생성하고 생성한 브랜치로 이동하기

기본적으로 개발을 진행하는 과정에서는 main 브랜치가 아닌 dev 브랜치를 하나 만들어서 작업을 하는 경우가 많다
dev 브랜치를 만들어서 해당 브랜치로 이동해 보자

여기서 HEAD는 현재 위치의 커밋을 가리킨다
즉, 현재 작업중인 커밋이다

git checkout -b dev 명령어를 통해서 dev 브랜치를 생성한다 (git switch -c dev 명령어도 가능하다)

Remote Repository 에도 생성한 브랜치를 반영하기 위해서는 git push origin dev 명령어를 입력해야 한다

git branch

생성한 브랜치 목록 및 현재 위치한 브랜치 확인하기

브랜치가 잘 생성되었는지 확인하고 싶면, git branch 명령어를 통해 확인할 수 있다
터미널 창에 git branch 를 입력하면 다음 화면이 나온다
알파벳 q 를 눌러서 종료할 수 있다

git checkout, git switch(2)

git checkout -b 새로운 브랜치 이름
git switch -c 새로운 브랜치 이름

브랜치를 생성하고 생성한 브랜치로 이동하기

팀 프로젝트에 들어가기 앞서 회의를 통해 하나의 기능을 구현할 때는 ‘feature/기능이름’ 이라는 브랜치를 만들어서 작업하기로 정했다면,
로그인 기능을 구현하기 위해서 feature/login 이라는 브랜치를 생성한다

git checkout -b feature/login 명령어를 입력

git switch -c feature/login 명령어도 같은 기능을 한다

git checkout, git switch(3)

git checkout -b 새로운 브랜치 이름
git switch -c 새로운 브랜치 이름

브랜치를 생성하고 생성한 브랜치로 이동하기

feature/login 브랜치에서 로그인 기능이 완성되었다
여기에 소셜 로그인(oauth) 기능을 추가해 보고 싶다
그런데 잘 만들어 놓은 로그인 코드를 건드리자니 위험 부담이 있고, 새로운 브랜치를 하나 더 만들어서 작업하고 싶다면,
feature/login-oauth 라는 이름으로 feature/login 브랜치에서 파생된 브랜치를 하나 더 만들어서 작업해 보자

git checkout -b feature/login-oauth 명령어를 입력

git switch -c feature/login-oauth 명령어도 같은 기능을 한다

git checkout, git switch(4)

git checkout -b 새로운 브랜치 이름
git switch -c 새로운 브랜치 이름

브랜치를 생성하고 생성한 브랜치로 이동하기

소셜 로그인 기능까지 구현이 완료되었다
이 feature/login-oauth 에 있는 코드를 feature/login 브랜치로,

병합(merge) 할 수 있는 방법

  1. 먼저 git checkout(switch) feature/login 명령어를 통해 feature/login 브랜치로 이동한다

git checkout -b feature/login 명령어를 입력,
merge하기 위해서는 먼저 병합이 될 브랜치로 이동을 해야 한다
즉 feature/login-oauth 브랜치를 feature/login 브랜치로 병합하기 위해서는 feature/login 브랜치로 이동해야 한다

git switch feature/login도 같은 기능을 한다

git merge

git merge 병합할 브랜치 이름

브렌치 병합하기

이제 feature/login-oauth 의 내용을 feature/login 브랜치로 병합하기 위해서는

  1. 현재 위치가 feature/login 인 상태에서 git merge feature/login-oauth 명령어를 입력한다

feature/login-oauth 브랜치가 머지되기 전 feature/login 브랜치에 추가적인 커밋이 없으므로, 브랜치가 분기될 필요가 없다, 그러므로 자동적으로 fast-forward 방식으로 병합이 이뤄진다

fast-forward 방식이란 별도의 커밋을 생성하지 않고 feature/login 브랜치가 가리키는 커밋을 feature/login-oauth 가 생성한 커밋으로 바꾸는 작업을 말한다
feature/login -> feature/login-oauth

feature/login 브랜치에 별도의 커밋이 있었다면 ?

만일, feature/login 브랜치에 별도의 커밋이 있었다면, fast-forward가 아닌 merge commit 방식으로 병합되었을 것이다
이는 각 브랜치가 줄기처럼 분기한 후, 병합의 모양새를 가진다

git merge feature/login-oauth 명령어를 입력해 해당 브랜치를 현재 위치한 브랜치로 병합(merge) 할 수 있다

merge와 rebase의 차이점

rebase의 원리가 바로 앞서 배웠던 fast-forward와도 같다

merge
변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해 진다

rebase
말 그대로 branch base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 하다

그림에서 보이는 것과 같이 feature/login 브랜치에서 git rebase main feature/login 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경된다 (main의 다른 커밋에서 충돌이 없을 경우)

git push origin 브랜치

git push origin feature/login

Remote Repository로 업로드 하기

로컬의 작업한 내용을 Remote Repository 에 업로드하기 위해서는 push를 해야 한다

git push origin feature/login 명령어를 입력해 해당 브랜치를 Remote Repository로 업로드할 수 있다

Pull Request

내가 Push한 변경 사항에 대해서 다른 사람들에게 알리는 것

feature/login 브랜치의 변경 사항을 다른 팀원들과 함께 코드 리뷰를 하고 dev 브랜치에 적용하고 싶다면,
Github의 Pull Request 기능을 활용해 dev 브랜치로의 반영을 요청할 수 있다
리뷰가 끝난 코드는 브라우저에서도 dev 브랜치로 merge 할 수 있다

간단하게 PR 내용을 입력한 후 Create pull request 버튼을 클릭한다

전체흐름

  1. Local에서 새로운 브랜치를 생성하고 작업이 끝나면 Remote Repository 로 Push 한다

  2. 그리고 Project Upstream Repository에 반영(merge)될 수 있도록 Pull Request 한다

만약 작업하던 중간에 Remote upstream 에 업데이트가 생긴다면 Local 로 pull 받아주어야 한다

profile
즐겁게 살자

0개의 댓글