Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[GIT] main의 변경사항 적용시키기 rebase 본문

Git

[GIT] main의 변경사항 적용시키기 rebase

mangdo 2021. 3. 28. 21:38

서로 다른 두 브랜치를 병합시키는 명령어는 두가지가 있다.

merge와 rebase.

 main에 내가 작업한 브랜치를 적용시킬 때는 merge를 주로 사용한다.

하지만 내가 작업한 브랜치에 main을 적용시킬때는 어떻게해야할까?

실제로  나는 프로젝트 작업 중에 내가 작업하던 브랜치에서 변경된 main브랜치의 내용이 필요했다. 그래서 어떻게 하면 좋을까 고민하다가 rebase라는 명령어를 알게되었다.

 

rebase VS merge

현재 상황

가정 1) main브랜치와 sub브랜치가 모두 변경되었다.

가정 2) B5와 A4가 충돌되고 있다

 

* merge라면?

git checkout main
git merge sub

* rebase라면?

git checkout main
git rebase sub

rebase명령어는 말그대로 re-base, 즉 브랜치의 base를 옮긴다는 의미이다.

이때 base는 현재 내가 작업하고 있는 브랜치와 합치려는 브랜치의 공통조상을 뜻한다.

 (기억조작!!)
merge명령어를 사용했을 때와 같은 merge commit을 생성하지않고 branch를 병합하기 위해서는
branch의 root commit이 바뀌어야한다. 이런 작업을 가능하게 해주는 것이 rebase명령어이다.

 

merge와 rebase의 차이를 알아보기위해 동일하게 main에서 rebase를 수행했다.

하지만 사실 master에서 rebase를 하는 것은 피해야한다. master를 rebase를 하게 되면 커밋도 새로 쓰고 정렬도 새로하기 대문에 기존의 커밋트리가 완전히 달라진다. (master는 함부로 건들지 말아야할 것을 유의하자!)

 

rebase의 활용 예

1. 내 브랜치를 작업하는 동안 main브랜치가 변경되었고 병합하려했으나 충돌이 날때

내 브랜치에서 main브랜치를 rebase하고 main으로 merge한다.

이러면 merge commit이 나지않는다.

 

2. 변경된 main브랜치의 내용을 현재 내 작업브랜치로 들고오고 싶을때

 

현재 상황

git checkout sub
git rebase main

rebase후

정리하면, rebase는 합치려고 하는 branch의 최신 commit으로 base를 옮겨주는 명령어!

(A4를 base로 바꿔주었다.)

쓸모없는 commit merge가 생기지않았고 commit history가 이쁘게된다.

 

단, rebase는 만약 중간에 충돌이 있다면 그 사이에 있는 커밋들 모두에서 충돌를 수정해줘야 할 수 있다. 

'Git' 카테고리의 다른 글

[Github] 리포지토리 언어 변경  (0) 2021.04.30
[Github] readme에 화면 녹화 올리기  (0) 2021.04.19
[VS Code] VS Code에서 git commit & push  (0) 2021.03.28
[VS Code] VS Code에서 git clone  (1) 2021.03.28
[Github] TIL 작성법  (4) 2021.03.27