
프로젝트 Remote Repository에서 Remote Repository(origin)로 Fork
Local Repo 로 git clone
git checkout -b <새로운 브랜치 이름> (git switch -c dev 명령어도 가능)
위 명령어로 브랜치를 새로 생성 (ex. dev)
Remote Repo에도 반영하기 위해서는 git push origin dev 명령어 입력!
git branch 를 통해 브랜치 목록과 내가 현재 dev브랜치에 있는 것이 맞는지 확인 가능
예시를 위해 추가적으로 feature/login 그리고 feature/login-oauth 브랜치를 추가 생성

feature/login-oauth 에 있는 코드를 feature/login 브랜치로 병합하기 위해서는
먼저 git checkout feature/login 을 입력하여 feature/login 브랜치로 이동하고
git merge feature/login-oauth 명령어를 입력하면 (이때 feature/login-oauth 는 커밋된 상태)
login ← login-oauth 이렇게 자동적으로 fast-forward 병합이 된다.
fast-forward 방식이란 별도의 커밋을 생성하지 않고, feature/login 브랜치가 가리키는 커밋을 feature/login-oauth 가 생성한 커밋으로 바꾸는 작업을 말한다.
(위와 같이 하면 commit이 된 상태이므로 push를 하면 병합된 내용이 feature/login 브랜치로 푸시가 된다)
만약 feature/login 브랜치에 별도의 커밋이 있었다면, fast-forward가 아니라 merge commit 방식으로 병합이 되었을 것이다.

merge vs rebase
merge는 변경 내용의 이력이 모두 그대로 남아있기 때문에 이력이 복잡해진다.
rebase는 branch base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
아래 그림처럼 feature/login 브랜치에서 git rebase main feature/login 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경된다.

어느 브랜치에서 rebase를 실행하고 어떤 브랜치가 가리키는 곳으로 base 를 변경할지에 유의해야 한다.
rebase 도 마찬가지로 실행시 커밋이 된 상태이므로 push 하면 해당사항이 반영된다.
feature/login 브랜치의 변경사항을 다른 팀원들과 코드 리뷰를 하고 상위 브랜치(dev)에 적용하고 싶을경우 Pull Request 기능을 활용해 dev 브랜치로의 반영을 요청할 수 있다. 리뷰가 끝난 코드는 브라우저에서도 dev 브랜치로 merge 할 수 있다.

프로젝트를 진행하시는 전체 흐름은 다음과 같다.
Local에서 새로운 브랜치를 생성하고 작업이 끝나면 Remote Repository 로 Push 한다.
그리고 Project Upstream Repository에 반영(merge)될 수 있도록 Pull Request 를 한다.
만약 작업하던 중간에 Remote upstream 에 업데이트가 생긴다면 Local 로 pull 받아주어야 한다!!!