현업에서는 main과 feature 외에도 다양한 브랜치들 사용(main, develop, feature, release, hotfix)
실제로 유저가 보는 모든 코드
개발한 브랜치(feature/
)를 합치는 브랜치
배포 전에 QA 과정을 통해 합친 코드를 최종 테스트할 때, 수정사항이 있을 경우 그 수정사항을 반영하는 브랜치
(release 브랜치에 수정사항을 반영하고 release가 끝나면(버그 수정이 끝나면) main 브랜치로 병합)
main에 병합한 이후 수정사항이 생겼을 때 수정사항을 반영하는 브랜치
(수정사항을 hotfix 브랜치에 반영하여 수정한 후 main에 병합)
예시)
feature/signup
을 main에 merge
--> main
을 feature/signin
에 merge
-->feature/signin
을 main
에 merge
--> ...
불필요한 merge commit이 남고, commit 내역이 섞이기 때문에 유지보수가 어려움
불필요한 merge commit 제거
같은 작업을 진행한 commit끼리 모으기 --> 브랜치, 기능별로 commit을 파악 가능
rebase를 하면서 squash 옵션을 사용하면 commit 메시지를 합칠 수 있음
squash해서 커밋을 합쳐도 다른 커밋의 작업 내역이 사라지는 것은 아님
1) 새로운 작업을 마치고 저장(git add
git commit
)
2) main 브랜치로 이동하여 Github의 최신화된 main을 pull받기(git pull origin main
)
3) rebase 시작(git rebase -i main
)
4) 첫 번째 수정용 에디터에서 commit들을 squash해서 정리하기(i
nsert)
pick commit내역1
pick commit내역2..
첫 번째 commit은 그대로 두고 나머지 commit들을 squash해서 합치기
(합칠 commit의 pick
을 s
로 수정)
저장하고 에디터에서 빠져나오기(esc
wq!
)
5) 두 번째 수정용 에디터에서 commit 메시지를 수정
(주석 외의 부분을 수정 및 삭제)
저장하고 에디터에서 빠져나오기(esc
wq!
)
6) 성공하면 successfully rebased..
라는 문구가 뜸
7) 정리된 커밋 내역과 커밋 메시지 확인(git log
)
8) Github에 push(git push origin 브랜치명 -f
)
rebase 후 push할때는 -f 옵션을 써야 함
1) rebase 중 충돌이 발생한 경우 rebase가 멈춤
(rebase가 끝나는 것이 아님. rebase ~ 1/6
과 같은 메시지를 통해 rebase가 진행되고 있음을 알 수 있음)
2) 충돌의 원인이 되는 코드를 수정 후 git add
(수정사항이 없으므로 commit은 하지 않음)
rebase 재개(git rebase --continue
)
git rebase --abort
)git reset soft
git reset hard
git reflog
git checkout <commit>
git stash
git stash apply
git stash clear