[Git] git flow , rebase

SeungMin·2022년 9월 4일
0

WECODE

목록 보기
16/19
post-thumbnail

최근에 git flow 수업을 들었다.

메인 브랜치는 정식 업데이트를 위한 브랜치로 사용하고,
기존의 메인 대신 Develop 브랜치를 새로 생성하여 해당 브랜치에서 기능개발을 하는 Flow 이다.

여러가지 기능이 추가되고 정식 업데이트가 가능해지면,
해당 버전의 Develop 브랜치에서 Release 브랜치를 생성하여
버그를 수정하고 메인 브랜치에 병합시켜서 정식으로 업데이트를 진행한다.

정식 버전에서 예상치 못한 오류가 발생한다면 Hotfix 브랜치를 메인에서 생성하여
빠르게 수정 후 메인과 병합한다.

좀더 서비스적인 관점에서 안전한 flow 인것이다.


지금까지 git을 사용하는 flow는 간단했다.

  1. git clone : main을 내 로컬에 복사한다.
  2. git branch : 기능별 , 페이지별 브랜치를 생성한다.
  3. git checkout : 작업을 시작 할 브랜치로 이동한다.
  4. git add : 현재까지 작업한 파일을 stage에 올린다.
  5. git commit : stage에 올린 파일을 커밋을 남기는 시점을 기준으로 기록한다.
  6. git push : 커밋이 완료된 파일을 브랜치별로 push한다.
  7. git pull : 원격 저장소에서 특정 기능을 main과 병합했을 경우, 로컬 main을 최신화한다.
  8. git merge : 최신화된 main을 기준으로 기능별 브랜치를 업데이트한다,
    해당 과정에서 발생하는 conflict를 해결한다.

하지만 이런 flow 를 사용하면, 마지막 pull merge 과정에서 버전이 꼬이게된다.

위의 사진과 설명처럼 merge 마다 불필요한 커밋이 남게되고,
병합된 브랜치 마다 가지고있던 커밋이 전부 하나의 브랜치에 몰리게되면서

커밋순서와 브랜치의구분이 어려워지고 속된말로 버전관리가 더러워진다.

그래서 사용하는 명령어가 Rebase 이다.


Rebase

Rebase의 기능은 다양하지만,
내가 배우고 사용하는 해당 명령어를 간단하게 설명하자면

기준이되는 커밋 이후의 모든 커밋을 하나로 묶어서 버전이 혼합되지 않게 병합하는 명령어이다.

사용법을 간단하게 설명하자면,

  1. git rebase -i main : 메인 브랜치를 기준으로 이후 생성된 커밋을 vim에서 편집한다.
    위의 사진처럼 터미널에서 vim이 열린다.

  1. i 를 눌러서 insert 모드로 진입한 뒤 최초 커밋 이후의 커밋은 s 로 지정하여 squash 해준다.
    그리고 esc 를 눌러서 명령어를 입력할 수 있게 해준뒤, :wq! 를 입력하여 저장하고 나간다.


  2. 다시 vim 창이 나타나면 최초 커밋의 이름을 제외하고는 모두 지운다.

    여기서

    이렇게 바꿔준 뒤, 아까처럼 esc 를 눌러서 명령어를 입력할 수 있게 해준뒤, :wq! 를 입력하여 저장하고 나간다.

  1. 마지막으로 git log 를 입력하여 변경된 커밋로그를 확인해본다.

    main 이후의 현재 브랜치의 커밋이 깔끔하게 정리되었다.
    또한 merge 커밋이력같은 추가적인 로그도 남지않는다.

이상태로 PR이 반영되어 해당 브랜치가 메인에 병합되면
하나의 커밋로그만 가진 채로 합쳐지는 것이다.

profile
공부기록

0개의 댓글