Git 에서 한 브랜치에서 다른 브랜치로 합치는 방법은 Merge와 Rebase가 있다. Rebase 사용시 좋은 점과 사용하지 말아야 할 때에 대해서 알아보자 (ch 3.6)
1) Rebase 기초
- 일반적으로 3 way merge로 브랜치 합치기를 함
- Rebase는 한 브랜치에서 변경된 사항을 다른 브랜치에 적용한다
+ Rebase할 브랜치를(B) checkout한 브랜치가 가르키는 커밋까지 diff하여 다른 내용을 임시로 저장해 놓음 (temp)
+ temp에 저장한 변경사항을 차례로 적용하여 Rebse될 브랜치(A)에 새로운 commit을 만든다
+ Rebase될 브랜치(A)는 가장 최신 commit 개체가 되고 브랜치의 포인터는 fast-forward 된다
+ 즉, Rebase는 기존 commit을 사용하는 것이 아니라 새로운 commit을 만들어 합치는 것이다
- Rebase가 merge 보다 좀 더 깔끔한 히스토리를 만든다. 일이 병렬로 하다 rebase 하면 선형적으로 된다
- 보통 리모트 브랜치에 커밋을 깔끔하게 적용하고 싶을 때 사용한다 (메인 프로젝트에 패치를 보낼 때)
- Rebase=브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합치고, Merge는 두 브랜치의 최종결과만 합친다
2) Rebase 위험성
- 이미 공개 저장소에 Push 한 커밋을 Rebase 하지 마라 : 동료와 협업시 commit 객체 내용이 삭제되어 버린다 (p. 78)
- 즉, 로컬에서 작업진행한 내 commit 개체만 Rebase하고 리모트에 있는 commit 개체의 rebase는 불허!!!
- Push 하기 전에 정리하려고 Rebase하는 것은 괜찮다
<사용법>
- http://mobicon.tistory.com/165 : 리모트 저장소에서 pull하고 conflict 날 경우
- http://mobicon.tistory.com/164 : 로컬 저장소에서 conflict 날 경우
'Git, GitHub > Git Lec02' 카테고리의 다른 글
[Pro Git] 커밋 가이드라인 (0) | 2013.01.25 |
---|---|
[Pro Git] 협업 Workflow (0) | 2013.01.25 |
[Pro Git] Branch 사용하기 (0) | 2013.01.16 |
[Pro Git] Git Alias 사용하기 (0) | 2013.01.08 |
[Pro Git] Tag 사용하기 (0) | 2013.01.08 |