본문 바로가기
IT 기술/개발환경_유틸 관련 팁

git rebase 시 conflict 발생

by 땅뚱 2012. 1. 19.
git rebase 를 수행하는데 conflict 가 발생한 경우에 해결 하는 절차를 적어본다.

우선 S project 라는 가상의 프로젝트에 A~J 까지 10개의 commit 이 있는 master branch 가 있다고 가정한다.
E 에 해당하는 commit 소스를 가지고 새로운 new_branch 이라는 local branch 를 만들어서 또다른 commit 작업을 수행했다고 가정한다. 새로 수행된 commit 은 K, L, M 이라고 하자 그럼 commit 된 내용을 그림으로 그려보면 아래와 같다.

                        K--L--M   : new_branch
                      /
A--B--C--D--E--F--G--H--I--J   : master

이런 상황에서 G commit 시점으로 나의 branch 를 rebase 하고 싶은 경우, 즉 그림상으로 다음과 같은 상황을 원하는 경우에 rebase 라는 명령을 사용한다.

                                  K--L--M   : new_branch
                                /
A--B--C--D--E--F--G--H--I--J   : master

이때 git 명령은 다음과 같이 수행한다. 우선 현재 local branch 가 new_branch 인지 확인 한다.

# git branch

new_branch 가 아닌 경우에 new_branch 로 이동한다.

# git checkout new_branch

이후 G commit 으로 rebase 한다.

# git rebase G new_branch

이때 충돌없이 rebase 가 되면 다행이지만, conflict 가 발생하게 되면, conflict 를 해결하고 진행해야 한다.

우선 conflict 가 발생한 파일을 수정하나서 git add 를 사용하여 수정된 파일을 index 에 추가한다.
그런 후에 git rebase 명령을 다시 수행해준다. git rebase 로 충돌이 발생하게 되면, 현재 local 상태는 (no branch)  상태로 존재하게 된다. 따라서 반드시 git rebase 명령으로 conflict 를 해제하고 계속 진행하거나(--continue), 취소하여야(--abort) 한다.

# git rebase --continue

이렇게 되면 new_branch 가 정상적으로 G commit 을 base 로 branch 된 것으로 수정된다.