프로젝트 Workflow
Git Merge Guide
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fa2b20a26-541e-4898-a4f0-937ccd6b7c5a%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.50.00.png)
- 프로젝트 Remote Repository를 생성
- 팀원들과 함께 나누어 작업하기 위해 각자의 Remote Repository로 Fork를 함
- local에서 작업하기 위해 git clone으로 repo를 복사
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F875f3307-1750-4b20-94de-1cbe90e8474f%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.52.14.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F50191de0-033a-46bb-baf2-e4d45878ffaa%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.56.22.png)
- main이 아닌 dev 브랜치를 만들어서 작업을 하기로 함
- dev 브랜치를 생성하고 해당 브랜치로 이동(HEAD는 현재 위치, 즉 작업중인 커밋을 가리킴)
- git checkout -b dev (git switch -c dev) 명령어로 dev 브랜치를 생성 후 이동
- git push origin dev 명령어로 Remote Repository에 생성한 브랜치를 반영함
- git branch 명령어로 브랜치가 잘 생성되었는지 브랜치 목록을 확인한다(q로 종료)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fbee02de4-3e0b-4632-9273-0f37b207a13a%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.58.43.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F8d00c83d-a577-46f6-897f-c7d2508b809e%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.00.14.png)
- 팀원들과 회의를 통해, 하나의 기능을 구현할 때는 'feature/기능이름'이라는 브랜치를 만들어서 작업하기로 정하였음
- git checkout -b feature/login 명령어로 브랜치를 생성 후 이동
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F7846730a-58f0-4be0-91dd-6cf8013b9288%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.00.42.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F0d0eee22-99ab-41c5-889c-d442578711c2%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.03.07.png)
- feature/login 브랜치에서 로그인 기능을 완성, 여기에 소셜 로그인(Oauth) 기능을 추가하고 싶음, 완성된 코드는 수정하기 어려우니 로그인 브랜치에서 새로운 브랜치를 파생해서 작업하기로 함
- git checkout -b feature/login-oauth 명령어로 브랜치 생성 후 이동
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F85ba2df2-0b52-4211-8a1e-b69ffe3bafb4%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.05.17.png)
- 소셜 로그인 기능까지 구현 완료, feature/login-oauth를 로그인 브랜치에 병합하기로 함
- merge를 하기 위해서는 먼저 병합이 될 브랜치로 이동해야 함
- git checkout feature/login 명령어로 feature/login 브랜치로 이동
- git merge feature/login-oauth 명령어로 oauth의 내용을 login으로 병합함
- feature/login-oauth 브랜치가 merge되기 전 login 브랜치에 추가적인 커밋이 없으므로, 브랜치가 분기 될 필요가 없음, 자동적으로 fast-foward 방식으로 병합이 이루어짐
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fc2cd42ce-4598-4696-8aa0-a03435dcf313%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.29.26.png)
- fast-foward 방식: 별도의 커밋 없이 login 브랜치가 가리키는 커밋을 login-oauth가 생성한 커밋으로 바꾸는 작업을 말함
- merge commit 방식: login 브랜치에 별도의 커밋이 있었다면, 브랜치가 줄기처럼 분기한 후 병합의 모양새를 가지게 하는 방식
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F999dcd51-e67f-412b-8d32-8151964563b7%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.30.25.png)
- merge와 rebase의 차이점
- merge: 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해짐
- rebase: branch base를 이동시킴, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능
- feature/login 브랜치에서 그림의 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경됨(main의 다른 커밋에서 충돌이 없을 경우)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fbeeec404-4d4c-43af-9517-9783c55b5edb%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.34.13.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F88802db8-e119-459f-b51f-14185f695979%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.41.56.png)
- 로컬의 작업 내용을 Remote Repository에 업로드하기 위해서 push를 해야 함
- git push origin feature/login 명령어로 업로드를 실행
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F3507d90c-2164-4a74-b259-4219d50efa76%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.36.38.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F4965da09-ff20-457a-91d7-f25fe016df89%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.36.55.png)
- 브랜치의 변경 사항을 팀원들과 코드 리뷰를 하고 dev 브랜치에 적용하고 싶을 때
- Github의 Pull Request 기능을 활용, dev 브랜치로의 반영을 요청함
- 간단하게 PR 내용을 입력한 후 Create pull request 버튼을 클릭
- 리뷰가 끝난 코드는 브라우저에서도 dev 브랜치로 merge할 수 있음
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F6b270a80-fbf8-40e1-87d4-dff43a7a5d0b%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.37.42.png)
- 전체 프로젝트 흐름 정리
- local에서 새로운 브랜치를 생성하고 작업이 끝나면 Remote Repository로 Push함
- Project Upstream Repository에 반영될 수 있도록(merge) Pull Request 함
- 만약 작업하던 중간에 Remote upstream에 업데이트가 생긴다면 local로 pull받아 주어야 함