Git


Git flow

Git flow란 Git 개발에 표준과 같이 사용되는 방법론입니다.
Git flow는 기능이 아닌 방법론입니다.

Git flow는 총 5가지의 브랜치를 사용하여 작업합니다.

Git flow branch

  • main : 기준이 되는 브랜치로, 정식 배포되는 안정적인 소스코드가 관리됩니다.
  • develop : feature에서 수정된 코드가 merge되는 브랜치입니다.
  • feature : 새로운 기능 개발, 버그 수정 등 코드 수정이 이루어지는 브랜치입니다.
    (feature 브랜치에서 작업된 내용은 PR을 거쳐 develop 브랜치에 병합됩니다.)
  • realease : 배포를 위해 QA(품질검사)를 하기위한 브랜치입니다.
  • hotfix : main에서 발생한 버그를 긴급 수정하기 위한 브랜치입니다.

Git flow init

git flow를 사용하기 위해 init 명령어를 이용해 git 저장소를 초기화 해줍니다.

$ git flow init

초기화를 진행하면 git flow에 맞는 브랜치를 생성할 수 있게 됩니다.

❗ 엔터키를 누르면 기본 브랜치명으로 생성됩니다.
→ 기본값으로만 설정하고 싶으면 git flow init -d를 사용하면 됩니다.

develop

개발 브랜치, 작업한 feature들을 병합합니다.

feature

  1. git flow feature start <브랜치 명>

명령어를 입력하면, <브랜치 명>에 맞는 브랜치가 생성되고 자동으로 switch 해줍니다.

생성된 브랜치에서 개발을 진행하면 됩니다.

$ git flow feature start <브랜치 명>

  1. git flow feature finish <브랜치 명>

명령을 실행하면 develop 브랜치로 switch하고 feature의 작업들을 병합해줍니다.

이때 Pull Requests가 필요하다면 Github에서 작업을 처리합니다.

$ git flow feature finish <브랜치 명>

  1. git flow feature publish <브랜치 명>

feature 브랜치를 원격 저장소에 push합니다.

$ git flow feature publish <브랜치 명>

release

  1. git flow release start <버전>

명령을 실행하면 release/<버전>이라는 브랜치가 생성됩니다.

이 브랜치에는 릴리즈 과정에서 수정된 작업 내용들이 들어갑니다.

$ git flow release start <버전>

  1. git flow release publish <버전>

feature 브랜치와 같이 원격 저장소에 push해 주는 명령어입니다.

$ git flow release publish <버전>

  1. git flow release finish <버전>

finish 명령을 실행하면,

1) release 브랜치를 main 브랜치와 병합합니다.
2) release 버전의 태그를 생성합니다.
3) release 브랜치를 develop 브랜치에 병합합니다.
4) release 브랜치를 삭제합니다.

$ git flow release finish <버전>

❗ 원격 저장소에 push할 때 git push --tags를 사용해 태그를 push해야 합니다.


hotfix

  1. git flow hotfix start <버전>

명령어를 실행하면 hotfix/<버전>이라는 브랜치가 생성됩니다.

  1. git flow hotfix finish <버전>

명령어를 실행하면,

1) hotfix 브랜치를 main 브랜치와 병합합니다.
2) hotfix 버전을 태그로 생성하고, 추가됩니다.
3) hotfix 브랜치를 develop 브랜치와 병합합니다.
4) hotfix 브랜치를 삭제합니다.

❗ 원격 저장소에 push할 때 git push --tags를 사용해 태그를 push해야 합니다.


되돌리기

Rename

쉘 명령어인 mv를 이용해 이름을 바꿀 수 있습니다.

$ git mv <기존 이름> <새 이름>

❗ git 명령어를 사용하지 않고 mv 명령어만 사용했을 경우 파일이 삭제되고 다시 생성됩니다.


Unstaging

restore 명령어를 사용하면 스테이징에 올라간 파일들을 내릴 수 있습니다.

$ git restore --staged <file>

Edit latest commit

--amend 플래그를 사용하면, 가장 최신 커밋을 수정할 수 있습니다.

$ git commit --amend

Revert

현재 HEAD에서 직전의 N개의 커밋을 순서대로 거슬러 올라가 해당 내역에 대한 commit과 push를 수행합니다.

$ git revert --no-commit HEAD~2.. -> HEAD에서 2개의 커밋을 되돌립니다.

Team procject

팀장

  1. 팀장이 organization에 저장소를 생성합니다.
  2. 생성된 저장소에 git flow init 명령어를 통해 초기화를 시켜줍니다.
  3. develop 저장소에서 git flow feature 명령어로 feature 브랜치를 생합니다.
  4. feature 브랜치에서 기본 설정을 합니다.
  5. pull requests를 리뷰 후 승인 또는 반려합니다.
  6. 승인이 된 PR을 저장소에 push해줍니다.

팀원

  1. organization 저장소를 fork한 후 로컬에 clone해 줍니다.
  2. clone한 저장소에 upstream을 추가합니다. (git remote add upstream "주소")
  3. git flow init을 통해 git flow 프로젝트로 초기화 합니다.
  4. git flow feature를 통해 feature 브랜치를 생성후 작업을 진행합니다.
  5. 작업 끝난 후 git push -u origin develop 명령어를 사용하여 원격 저장소에 push합니다.
  6. create pull requests를 통해 organization에 PR을 보냅니다.
  7. 반려된 사항이 있을 경우 수정 후 develop에서 push합니다.
  8. organization 저장소의 최신 버전을 git pull upstream develop을 통해 당겨옵니다.

1개의 댓글

comment-user-thumbnail
2022년 9월 30일

깃왕짱🙏🏻

답글 달기