GIT 8 - rebase
rebase 란
공통의 조상을 base라 말한다. 여기서는 보시다시피 c를 지칭한다. 그래서 master를 topic으로 rebase 하겠다는 말은 버전 m1의 부모 c를 t2로 하겠다는 말이다. 즉 base를 다시 설정한다는 의미이다. 결국에는 로그가 선형적으로 보이게 해주는것이다.
브런치 버전 정보와 현재 topic 브런치 파일들과 master 브런치의 파일들은 이렇게 설정하였다.
여기서 master와 topic 브런치의 공통 조상은 init이다. master의 조상 init -> topic 버전의 t3 바꾸기 위함이다. 이것이 rebase다 (공통 부모를 재설정) . init -> t1 -> t2 -> t3 -> m1 -> m2 처럼 커밋들의 관계를 바꾸는 것이다.
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
를 하게 되면
선형적으로 로그가 보여지는것을 알 수 있다. 그래서 init -> t1 -> t3 이후에 m1 -> m2 가 작업한것처럼 보이게 해주는 것이다.
Merge vs Rebase
Merge : 버전 t2와 버전 m2를 합병해서 새로운 버전 mt3를 만드는 것
Rebase: 버전 t2와 버전 m1을 merge해서 새로운 버전 m1이 만들어지고 , 그리고 m1과 m2를 합쳐서 새로운 버전 m2를 만드는 것.
주의 : rebase는 m1과 m2를 원격 저장소에 push 하기 이전에 이루어져야 한다. 즉 본인 로컬 리포지토리에서 수행되어져야 한다. 그리고 merge를 통한 결과와 rebase를 한 결과는 반드시 같아야 한다. 과정이 다를뿐
Reference
'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 |
댓글