본문 바로가기

■ 프로그래밍/Front-end

Git & GitHub (4) - rebase

같이 협업하는 사람이 몇 없다면 굳이 rebase를 쓰지 않아도 되지만, 팀 단위가 몇 백명 이상이 됐을 때 각자 commit을 2-3개만 날려도 검토해야 할 것이 수백개로 늘어나도 merge 할 때마다 commit이 새로 쌓인다. 

따라서 git의 history를 깨끗하게 사용하기 위해 rebase가 필요하다. 

 

rebase 

ㅁ base: 기초, 기본

ㅁ re-base: 기초를 다시 세우다

=> 현재 내 branch를 master와 동일시 하고(같은 base 사용), commit을 하나로 합치는 작업이다. 

 

단점이 있다면 conflict가 엄청 많이 난다.

각 commit 마다 생기는 conflict를 단계적으로 해결해야 하고, 잘 못하다간 내가 썼던 코드가 통째로 없어져 버릴 수 있으니 충분히 숙련 후 사용하길 권장한다. 

 

 

rebase 방법

1. 브랜치 생성 후, 작업한 것을 add, commit, push 후 PR을 날린다

2. 마스터 브랜치로 이동, git checkout master

3. 마스터 pull, git pull origin master

4. rebase

  1) 마스터 브랜치에서 할 경우, git rebase -i master 브랜치명

  2) 브랜치에서 할 경우, git rebase -i master

5. commit 하나로 합치기

기존 commit
밑의 commit은 s(squash)로 합치기

제일 위에 것만 pick으로 놔둬서 commit으로 사용하고, 밑에 꺼는 s로 commit 합친 후 저장

6. conflict가 나온 다면

- 해당 파일 수정 후, git add .

 a) git rebase --continue

 b) git rebase --abort (rebase 중단, 뭔가 꼬일 거 같을 때 사용)

- 내가 남기고 싶은 commit message로 내용 바꾼 후 저장

- 다 수정하고, git push origin 브랜치명

- PR 날리기

7. 그 이후, 

- PR 날리고 수정하고 commit을 날렸다면  다시 반복
- git checkout master
- git pull origin master
- git rebase -i master feature/브랜치명
- git push origin feature/브랜치명 -f (강제 push)