(14) git rebase

2019. 5. 5. 16:23GIT

git merge와는 다른 방법으로 branch들을 합치는 방법입니다. 우선 둘을 비교하며 설명해보겠습니다. 

 

우선 merge에서는 fast-forward방식이 아니라면 아래와 같이 합칠려고하는 3way merge를 사용합니다. 서로의 공통된 조상 branch를 고른 후 합치려는 브랜치 둘을 합쳐줍니다. 

3way merge

merge한결과 아래와 같이 됩니다. 

그럼 rebase의 같은 경우에는 아래와 같은 경우가 있을 때

 

git checkout experiment
git rebase master

해주면 아래와 같은 상황이된다. experiment branch를 떼서 c3의 내용을 합치며 c4'를 만드는 것이다. 

git checkout master
git merge experiment

다시 merge시켜주면 fast-forward가 진행되며 master와 experiment 둘다 C4' 를 가리키게 된다. merge와 같은 효과가 생기게된다. 결과는 동일하지만 rebase는 좀더 깨끗한 히스토리를 만든다. git의 로그를 찍어봐도 

rebase의 경우 
merge의 경우 

그리고 rebase를 하는 경우에 충돌이 날 수 있지만 충둘 후 두 브랜치는 깔끔하세 merge fast-forward가 생겨서 빠르게 합쳐진다. 그리고 가장 큰 차이점은 branch들을 순서대로 합하며 rebase를 실행하지만 merge는 최신 branch의 최종결과 둘 만을 갖고 합친다. 

 

주의할 점 

 

서버에 push한 커밋을 rebase해주면 안된다. 

 

Documentation의 말로는 git서버에 올린 후 서로 협업을 하며 pull하고 merge를 하며 소스코드가 대 엉망이 될 수 있다고 한다. 
https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0

 

--추후 추가 예정 

'GIT' 카테고리의 다른 글

(13)git stash  (0) 2019.04.30
(12)git merge conflict  (0) 2019.04.30
(11) git merge  (0) 2019.04.30
(10) git branch 비교하기  (0) 2019.04.29
(9) git branch  (0) 2019.04.29