Git Workflow & Rebase

강민성·2022년 1월 11일
0

main, develop, feature, release, hotfix


현업에서는 main과 feature 외에도 다양한 브랜치들 사용(main, develop, feature, release, hotfix)

main

실제로 유저가 보는 모든 코드

develop

개발한 브랜치(feature/)를 합치는 브랜치

release

배포 전에 QA 과정을 통해 합친 코드를 최종 테스트할 때, 수정사항이 있을 경우 그 수정사항을 반영하는 브랜치
(release 브랜치에 수정사항을 반영하고 release가 끝나면(버그 수정이 끝나면) main 브랜치로 병합)

hotfix

main에 병합한 이후 수정사항이 생겼을 때 수정사항을 반영하는 브랜치
(수정사항을 hotfix 브랜치에 반영하여 수정한 후 main에 병합)

merge, rebase

merge

예시)

feature/signup을 main에 merge
--> mainfeature/signin에 merge
-->feature/signinmain에 merge
--> ...

merge의 단점

불필요한 merge commit이 남고, commit 내역이 섞이기 때문에 유지보수가 어려움

rebase

rebase의 장점

불필요한 merge commit 제거
같은 작업을 진행한 commit끼리 모으기 --> 브랜치, 기능별로 commit을 파악 가능

squash

rebase를 하면서 squash 옵션을 사용하면 commit 메시지를 합칠 수 있음
squash해서 커밋을 합쳐도 다른 커밋의 작업 내역이 사라지는 것은 아님

rebase 실습

1) 새로운 작업을 마치고 저장(git add git commit)
2) main 브랜치로 이동하여 Github의 최신화된 main을 pull받기(git pull origin main)
3) rebase 시작(git rebase -i main)
4) 첫 번째 수정용 에디터에서 commit들을 squash해서 정리하기(insert)

pick commit내역1 
pick commit내역2..

첫 번째 commit은 그대로 두고 나머지 commit들을 squash해서 합치기
(합칠 commit의 picks로 수정)
저장하고 에디터에서 빠져나오기(esc wq!)
5) 두 번째 수정용 에디터에서 commit 메시지를 수정
(주석 외의 부분을 수정 및 삭제)
저장하고 에디터에서 빠져나오기(esc wq!)
6) 성공하면 successfully rebased..라는 문구가 뜸
7) 정리된 커밋 내역과 커밋 메시지 확인(git log)
8) Github에 push(git push origin 브랜치명 -f)
rebase 후 push할때는 -f 옵션을 써야 함

rebase 중 충돌이 생겼을 경우

1) rebase 중 충돌이 발생한 경우 rebase가 멈춤
(rebase가 끝나는 것이 아님. rebase ~ 1/6과 같은 메시지를 통해 rebase가 진행되고 있음을 알 수 있음)
2) 충돌의 원인이 되는 코드를 수정 후 git add(수정사항이 없으므로 commit은 하지 않음)
rebase 재개(git rebase --continue)

  • 충돌이 여러 번 발생할 경우
    충돌이 발생할 때마다 2)를 반복
    만약 해결이 안된다면 아예 rebase를 진행하기 전 상황으로 돌아갈 수 있음(git rebase --abort)

유용한 명령어들

  • git reset soft
  • git reset hard
  • git reflog
  • git checkout <commit>
  • git stash
  • git stash apply
  • git stash clear
profile
Back-end Junior Developer

0개의 댓글