팀월들과 함께 작업하기 위해 각자 Remote Repository로 Fork한 후, Local에서 작업하기 위해서 Git clon명령어로 Repository를 Local에 가져온다.
기본적으로 개발을 진행하는 과정에서는 main 브랜치가 아닌 dev브랜치를 하나 만들어서 작업을 하는 경우가 많다. dev브랜치를 만들기 위해 git checkout -b (새로운)브랜치-이름 OR git switch -c (새로운)브랜치-이름 으로 만들어 해당브런치로 이동하면 되겠다.
git checkout -b dev 명령어를 통해서 dev 브랜치를 생성하였다. Remote Repository에도 생성한 브랜치를 반영하기 위해서는 git push origin dev 명령어를 입력해 주어야 한다.
브랜치가 잘 생성되었는지 확인하거나 생성한 브랜치의 목록과 내가 현재 dev브랜치에 있는 것이 맞는지 확인해 볼 방법은 없을까?
git branch 명령어를 입력해 확인할 수 있다.
팀프로젝트에 글어가기 앞서 하나의 기능을 구현할 때는 "feature/기능이름"이라는 브랜치를 만들어서 작업하기로 하였다. 로그인 기능을 구현하기 위해 feature/login이라는 브랜치를 생성해보자.
git checkout -b feature/login 명령어를 입력하여 브랜치를 생성하고 해당 브랜치로 이동한다.( git switch -c feature/login 명령어도 같은 기능을 한다.)
feature/login 브랜치에서 로그인 기능이 완성되었다고 하자. 여기에 소셜 로그인 기능을 추가하고 싶지만 잘 만들어 놓은 로그인 코드를 건드리자니 위험 부담이 있다. 새로운 브랜치를 하나 더 만들어 작업하려고 한다. feature/login-oauth라는 이름으로 feature/login 브랜치에서 파생된 브랜치를 하나더 만들어보자.
git checkout - b feature/login-oauth 라는 명령어를 입력하여 새로운 브랜치를 만든다.
소셜 로그인 기능까지 구현이 완료되었다. 이 feature/login-oauth에 있는 코드를 feature/login 브랜드로 병합해보자.
먼저 git checkout feature 명령어를 통해 feature/login 브랜치로 이동한다.
git checkout feature/login 명령어를 입력하였다. 병합하기 위해서 먼저 병합이 될 브랜치로 이동을 해야한다.
즉, feature/login-oauth 브랜치를 feature/login 브랜치로 병합하기 위해서는 feature/login브랜치로 이동해야한다.
이제 feature/login-oauth의 내용을 feature/login 브랜치로 병합하기 위해서는 현재 위치가 feature/login인 상태에서 git merge feature/login-oauth 명령어를 입력한다.
feature/login-oauth 브랜치가 병합(merge)되기 전 feature/login 브랜치에 추가적인 커밋이 없으므로 브랜치가 분기 될 필요가 없다. 그러므로 자동으로 *fast-forward 방식 으로 병합이 이루어진다.
*fast-forward방식 이란 별도의 커밋을 생성하지 않고, feature/login 브랜치가 가리키는 커밋을 feature/login-oauth가 생성한 커밋으로 바꾸는 작업을 말한다.
만일 feature/login 브랜치에 별도의 커밋이 있었다면, fast-forward가 아닌 merge commit방식으로 병합되었을 것이다. 이는 각 브랜치가 줄기처럼 분기한 후 병합의 모양을 갖는다.
rebase vs merge
rebase의 원리는 앞에 있는 fast-foward와도 같다 말 그대로 branch base를 이동시킨다는 뜻으로 머지처럼 브랜치 통합을 목적으로 하지만 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
로컬에서 작업한 내용을 Remote Repository에 업로드 하기 위해서는 Push를 해야한다.
git push origin 명령어를 입력해 해당 브랜치를 Remote Repository로 업로드할 수 있다.
내가 작업을 하던 중에 다른 요청이 들어와 하던 작업을 멈추고 잠시 브랜치를 변경해야할 일이 있다고 한다면 아직 완료하지 않을 일을 commit하는 것은 껄끄러운 일이다. 이럴 경우 어떻게 해야 할까?
git stash란?
아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어이다. 이를 통해 아직 완료하지 않을 일을 commit하지 않고 나중에 다시 꺼내와 마무리할 수 있다.