오늘도 개발
Git rebase 본문
(위코드 수업 Git Workflow & Rebase를 정리한 내용입니다.)
Git merge
두 브랜치를 합칠 때 commit을 시간순으로 정렬해서 합치는 방법.
merge되는 브랜치(ex.feature)에 merge할 브랜치(ex.main)의 commit을 시간 순으로 삽입함.
merge 후 불필요한 merge commit도 생성. (모든 feature 브랜치마다 merge commit이 남음.)
commit이 시간순으로 정렬됨.
=> 단점 : 브랜치 history가 지저분해짐
ex) feature/sign-in에서 main을 merge하면
main의 커밋이 feature/sign-in의 커밋과 섞여서 정렬되고 merge commit이 남음

Git rebase
두 브랜치를 합칠 때 commit을 브랜치별로 정렬해서 합치는 방법.
merge되는 브랜치(ex.feature)의 커밋 밑에 merge할 브랜치(ex.main)의 커밋을 붙임.
(= feature 브랜치의 base를 main 브랜치로 변경)
commit이 브랜치별(작업별)로 정렬됨.
merge commit을 남기지 않음.
=> 장점 : 브랜치 history가 정리됨
=> 단점 : 두 개 이상 commit이 한 번에 git conflict를 일으킬 수도 있음
ex) feature/sign-in에서 main을 rebase하면
main 커밋의 위에 feature/sign-in의 커밋이 붙음. merge commit이 남지 않음.

base commit 확인하는 방법
git merge-base main feature/sign-in
squash
rebase 시 의미없는 커밋을 합치는 일
방법
1. Main 브랜치로 이동하여 remote main pull 받기
2. feature 브랜치로 이동
3. rebase 진행
git rebase -i <브랜치명>
첫번째 에디터 나옴 - squash 진행
1. 인터렉션 창 뜨면 제일 예전 커밋 pick
2. 가장 오래된 commit만 pick하고 나머지는 squash(앞머리에 s 붙임)
3. 저장하고 vim 나오기

두번째 에디터 나옴 - rebase된 커밋 내용 작성
1. 현재까지 적은 커밋 메세지 전부 나타남
2. 불필요한 내용 제거, 현재 수정 내역에 대한 커밋 메시지 작성
3. 저장하고 vim 나오기
rebase 후 push하기
git은 히스토리가 다른 브랜치의 push를 허용하지 않으므로 오류가 날 것.
강제 push 진행하거나 pull 받아서 진행할 수 있음.
# 강제 push 진행 방법
git push origin feature/login -f
충돌 해결하기
충돌 일어나면 해당 부분 수정 후 git add 진행(commit은 안해도 됨)
git add .
rebase 다시 진행.
Git rebase --continue
충돌 날 때마다 위 과정 반복.
해결이 안 되면 rebase 중단하고 취소하기
git rebase ㅡㅡabort
알아두면 좋은 git 명령어
git reset --soft
git reset --hard
git log
git reflog
git checkout
git stash
git stash apply
git stash clear
'웹 프로그래밍 > Git' 카테고리의 다른 글
| Git stash (0) | 2023.02.18 |
|---|---|
| Git checkout, restore, switch (0) | 2023.02.18 |
| Git flow (0) | 2022.08.02 |
| [Git] push, merge, pull로 브랜치를 항상 최신화하는 방법 (0) | 2022.07.09 |
| [Git] Git과 Github (0) | 2022.03.17 |