git에서 merge conflict가 발생할 경우 좀 더 쉽게 하고 싶다면 rebase를 사용할 수 있다. rebase의 동작 순서와 언제 사용할지 알아보자.
1) local rebase 명령 전제 조건
- master로 부터 현재 commit 내용으로 신규 branch인 admin을 만든다
- master로 새로운 commit 내용이 있고, 신규 branch(admin)도 새로운 commit이 존재한다
- admin 브랜치의 내역을 그대로 master 브랜치로 merge하지 않고 add 하고 싶을 경우
- git checkout admin : admin 브랜치로 checkout 한다
- git rebase master : master의 commit 내역을 admin 브랜치에 add 한다
- git checkout master : 다시 master로 돌아 온다
- git merge admin : master에 admin을 merge 한다. 이럴 경우 admin 브랜치로 갈라진 이후 master의 신규 commit이 admin 브랜치에 들어 있으므로 fast-forward merge가 가능해 진다.
////////////////////////////////////////////////////
// admin 브랜치를 신규로 만들고 checkout 하기
$ git checkout -b admin
Switched to a new branch 'admin'
$ git branch
* admin
master
////////////////////////////////////////////////////
// rebase.html 파일을 신규로 만들고 commit 2번 하기
$ touch rebase.html
$ git add rebase.html
$ git commit -m "add rebase html"
[admin d375a11] add rebase html
1 file changed, 1 insertion(+)
create mode 100644 rebase.html
$ vi rebase.html <- 내용 변경
$ git commit -am "update rebase html"
[admin 22bbd02] update rebase html
1 file changed, 1 insertion(+), 1 deletion(-)
////////////////////////////////////////////////////
// master 에서도 신규 파일을 생성하고 두번 commit 하기
$ git checkout master
Switched to branch 'master'
$ touch dowon.js
$ vi dowon.js
$ git add dowon.js
$ git commit -m "add dowon javascript file"
[master cc77217] add dowon javascript file
1 file changed, 1 insertion(+)
create mode 100644 dowon.js
$ vi dowon.js
$ git commit -am "add dowon javascript file"
[master 841c14f] add dowon javascript file
1 file changed, 1 insertion(+), 1 deletion(-)
////////////////////////////////////////////////////
// admin 브랜치로 이동하여 master의 신규 commit 2 개를
// admin 브랜치로 복사하기
$ git checkout admin
Switched to branch 'admin'
// admin 브랜치의 commit 내역 확인
$ git log --pretty=oneline
22bbd02cf7c49a96efb5eb4d38768e67d0c120da update rebase html
d375a1105a24ccc69895ef74d041329bc947d204 add rebase html
f42a865365aa53a6071887237057f593b75d236a Merge branch 'master' of https://github.com/ysyun/pro_git
fbf93820f62f1bc1035f2ba38e941fcae6212fb9 change README.md
c917ae5f7787844b63826a460d82a998bad08a7f Update README.md
// admin 브랜치로 갈라진 이후 master에 추가된 commit 내역을 admin 브랜치로 복사하기
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: add rebase html
Applying: update rebase html
// commit 내역 확인
// 녹색 부분 : master의 commit 내역이 admin 브랜치로 복사되었다. 단, admin commit 내역 밑으로 복사됨
$ git log --pretty=oneline
3166e4c833705ffc74295b8cc1465a9131b53ef9 update rebase html
d40464af367bdfddb6303feda754937e228e8d57 add rebase html
841c14fb69239bda408aee262e2aea09fb0b83ca add dowon javascript file
cc772174619fa2989c0b3728144f0b885c7faca8 add dowon javascript file
f42a865365aa53a6071887237057f593b75d236a Merge branch 'master' of https://github.com/ysyun/pro_git
fbf93820f62f1bc1035f2ba38e941fcae6212fb9 change README.md
c917ae5f7787844b63826a460d82a998bad08a7f Update README.md
////////////////////////////////////////////////////
// master 브랜치로 다시 이동하여 admin 브랜치와 merge
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
// fast-forward merge를 수행했다.
$ git merge admin
Updating 841c14f..3166e4c
Fast-forward
rebase.html | 1 +
1 file changed, 1 insertion(+)
create mode 100644 rebase.html
$ git branch
admin
* master
$ git log --pretty=oneline
3166e4c833705ffc74295b8cc1465a9131b53ef9 update rebase html
d40464af367bdfddb6303feda754937e228e8d57 add rebase html
841c14fb69239bda408aee262e2aea09fb0b83ca add dowon javascript file
cc772174619fa2989c0b3728144f0b885c7faca8 add dowon javascript file
f42a865365aa53a6071887237057f593b75d236a Merge branch 'master' of https://github.com/ysyun/pro_git
fbf93820f62f1bc1035f2ba38e941fcae6212fb9 change README.md
c917ae5f7787844b63826a460d82a998bad08a7f Update README.md
- Local 저장소에서의 rebase 명령 :master 브랜치로 분기된 이후 신규 branch에서 master 브랜치의 commit 내역을 복사 하고 싶을 경우 사용한다
'Git, GitHub' 카테고리의 다른 글
[Git] Reference & Tutorial 사이트 (0) | 2013.01.25 |
---|---|
[Git] Remote 저장소로 부터 merge conflict시에 rebase 명령 사용하기 (0) | 2013.01.14 |
[Git] GitHub Remote(원격) 저장소에 브랜치 생성/삭제하기 (0) | 2013.01.13 |
[Git] 원같은 파일 수정후 원격 저장소 Push 할 때 Merge Conflict 발생할 경우 해결하기 (0) | 2013.01.13 |
[Git] fast-forward merge 를 위한 조건 (0) | 2013.01.13 |