본문 바로가기
GIT

GIT 8 - rebase

by 두잇베스트 2021. 2. 18.

GIT 8 - rebase

 

 

rebase 란

2021-02-18_00-45-55

 

2021-02-18_00-48-50

 

공통의 조상을 base라 말한다. 여기서는 보시다시피 c를 지칭한다. 그래서 master를 topic으로 rebase 하겠다는 말은 버전 m1의 부모 c를 t2로 하겠다는 말이다. 즉 base를 다시 설정한다는 의미이다. 결국에는 로그가 선형적으로 보이게 해주는것이다.

 


 

 

 

 

2021-02-18_00-08-19

 

2021-02-18_00-09-41

브런치 버전 정보와 현재 topic 브런치 파일들과 master 브런치의 파일들은 이렇게 설정하였다.
여기서 master와 topic 브런치의 공통 조상은 init이다. master의 조상 init -> topic 버전의 t3 바꾸기 위함이다. 이것이 rebase다 (공통 부모를 재설정) . init -> t1 -> t2 -> t3 -> m1 -> m2 처럼 커밋들의 관계를 바꾸는 것이다.

 

2021-02-18_00-19-24

master의 부모를 topic 브런치의 버전 t3로 바꾸기 위해서는 git checkout master 이동하고, 이 master 브런치를 rebase 한다는 의미로 git rebase topic을 해야한다. 그 결과 git은 버전 t3에 master 브런치의 m1을 merge 하여 새로운 버전(m1)으로 만들고 ( Applying: m1을 의미) , 그 다음 m2를 merge 하여 새로운 버전(m2)을 만든다( Applying: m2)

그 결과 git log --all --graph --oneline를 하게 되면

 

2021-02-18_00-27-14

선형적으로 로그가 보여지는것을 알 수 있다. 그래서 init -> t1 -> t3 이후에 m1 -> m2 가 작업한것처럼 보이게 해주는 것이다.

 

 

Merge vs Rebase

2021-02-18_00-35-33

Merge : 버전 t2와 버전 m2를 합병해서 새로운 버전 mt3를 만드는 것
Rebase: 버전 t2와 버전 m1을 merge해서 새로운 버전 m1이 만들어지고 , 그리고 m1과 m2를 합쳐서 새로운 버전 m2를 만드는 것.

주의 : rebase는 m1과 m2를 원격 저장소에 push 하기 이전에 이루어져야 한다. 즉 본인 로컬 리포지토리에서 수행되어져야 한다. 그리고 merge를 통한 결과와 rebase를 한 결과는 반드시 같아야 한다. 과정이 다를뿐

 

 

Reference

Rebase의 개념과 기본 사용법 - 생활코딩

'GIT' 카테고리의 다른 글

GIT 6 - Merge & Conflict  (0) 2021.02.17
GIT 5 - branch  (0) 2021.02.17
GIT 4 - reset & revert  (0) 2021.02.17
GIT2 - 버전간의 차이점  (0) 2021.02.17
GIT 3 - checkout  (0) 2021.02.17

댓글