오늘도 개발

Git rebase 본문

웹 프로그래밍/Git

Git rebase

Sueeeeeee 2022. 8. 2. 11:21

(위코드 수업 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