git rebase / git merge 차이점과 사용시기
git merge 와 git rebase 는 각각 언제 사용하여야 하는 것일까요?
본인의 사용한 경우를 예로 들어 보겠습니다.
- rebase : 현재 branch 의 base 가 되는 지점부터의 history 를 모두 다른 branch 로 옮김.
- merge : merge 할 branch 의 수정 내용만 내 branch 로 옮김.
대충 그린 그림이지만 그림을 보시죠. ^^
a'' 에서 a -> b 사이의 수정 내용이 필요할 때 a'' 위치에서
$ git rebase b
라고 실행하면 결과물은 ba'' 가 나오고, 이때 a에서 a'로 가는 commit 화살표는 사라져 버립니다.
a -> a' -> a'' commit history 가 b -> a' -> a'' commit 으로 바뀝니다.
rebase 작업 후 a branch 에서 다시 a -> b 로 변경되 commit 내용을 제외한 source 로 작업이 불가능 하다는 것 입니다.
실제 rebase 의 과정을 보면 b branch 로 checkout 을 한 후 a' 와 a'' 를 cherry-pick 하는 것과 동일한 작업을 하더군요 하지만 이 작업이 자동으로 된다는 차이점이 있겠죠.
merge 의 경우
a'' 의 위치에서
$ git merge b
라고 하면 a 에서 b 사이의 변경 내용을 a'' 에 덧 붙여서 a''b 를 만들어 냅니다.
그리고 a branch 는 계속 유지가 되는거죠. 물론 b 도 유지가 됩니다.
그리고 차후 a branch 에서 b 의 내용이 적용되지 않은 상태로 작업을 하고 싶을 경우 a'' 로 head 를 옮기고 branch 를 새로 만든 후 작업을 하면 됩니다.
결과물은 같지만 이후 어떤 일을 해야 하느냐에 따라서 merge 와 rebase 를 사용하는 방법이 달라질 수 있다는 예를 들은 것 입니다. 이상!
출처 : http://littlehead.tistory.com/5 인데 조금 수정 했음.
repo 명령어 (command) 설명 init sync diff prune forall upload download start status (1) | 2012.12.12 |
---|---|
git detached HEAD 상태로 커밋이 사라지는 경우 (0) | 2012.12.09 |
git rebase 명령어 중 유용한 옵션 option --onto (0) | 2012.11.30 |
git reset 명령어와 옵션 (1) | 2012.11.22 |
git 의 branch 와 tag 그리고 head 의 이해 (3) | 2012.11.17 |