TIL-220104_2

EBinY·2022년 1월 4일
0

TIL - Today I Learned

목록 보기
41/54

프로젝트 Workflow

Git Merge Guide

  • 프로젝트 Remote Repository를 생성
  • 팀원들과 함께 나누어 작업하기 위해 각자의 Remote Repository로 Fork를 함
  • local에서 작업하기 위해 git clone으로 repo를 복사

  • main이 아닌 dev 브랜치를 만들어서 작업을 하기로 함
  • dev 브랜치를 생성하고 해당 브랜치로 이동(HEAD는 현재 위치, 즉 작업중인 커밋을 가리킴)
  • git checkout -b dev (git switch -c dev) 명령어로 dev 브랜치를 생성 후 이동
  • git push origin dev 명령어로 Remote Repository에 생성한 브랜치를 반영함
  • git branch 명령어로 브랜치가 잘 생성되었는지 브랜치 목록을 확인한다(q로 종료)

  • 팀원들과 회의를 통해, 하나의 기능을 구현할 때는 'feature/기능이름'이라는 브랜치를 만들어서 작업하기로 정하였음
  • git checkout -b feature/login 명령어로 브랜치를 생성 후 이동

  • feature/login 브랜치에서 로그인 기능을 완성, 여기에 소셜 로그인(Oauth) 기능을 추가하고 싶음, 완성된 코드는 수정하기 어려우니 로그인 브랜치에서 새로운 브랜치를 파생해서 작업하기로 함
  • git checkout -b feature/login-oauth 명령어로 브랜치 생성 후 이동
  • 소셜 로그인 기능까지 구현 완료, feature/login-oauth를 로그인 브랜치에 병합하기로 함
  • merge를 하기 위해서는 먼저 병합이 될 브랜치로 이동해야 함
  • git checkout feature/login 명령어로 feature/login 브랜치로 이동
  • git merge feature/login-oauth 명령어로 oauth의 내용을 login으로 병합함
  • feature/login-oauth 브랜치가 merge되기 전 login 브랜치에 추가적인 커밋이 없으므로, 브랜치가 분기 될 필요가 없음, 자동적으로 fast-foward 방식으로 병합이 이루어짐
  • fast-foward 방식: 별도의 커밋 없이 login 브랜치가 가리키는 커밋을 login-oauth가 생성한 커밋으로 바꾸는 작업을 말함
  • merge commit 방식: login 브랜치에 별도의 커밋이 있었다면, 브랜치가 줄기처럼 분기한 후 병합의 모양새를 가지게 하는 방식
  • merge와 rebase의 차이점
    • merge: 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해짐
    • rebase: branch base를 이동시킴, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능
    • feature/login 브랜치에서 그림의 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경됨(main의 다른 커밋에서 충돌이 없을 경우)

  • 로컬의 작업 내용을 Remote Repository에 업로드하기 위해서 push를 해야 함
  • git push origin feature/login 명령어로 업로드를 실행

  • 브랜치의 변경 사항을 팀원들과 코드 리뷰를 하고 dev 브랜치에 적용하고 싶을 때
  • Github의 Pull Request 기능을 활용, dev 브랜치로의 반영을 요청함
  • 간단하게 PR 내용을 입력한 후 Create pull request 버튼을 클릭
  • 리뷰가 끝난 코드는 브라우저에서도 dev 브랜치로 merge할 수 있음
  • 전체 프로젝트 흐름 정리
    • local에서 새로운 브랜치를 생성하고 작업이 끝나면 Remote Repository로 Push함
    • Project Upstream Repository에 반영될 수 있도록(merge) Pull Request 함
    • 만약 작업하던 중간에 Remote upstream에 업데이트가 생긴다면 local로 pull받아 주어야 함

0개의 댓글