TIL/삽질 기록소

[Git] rebase conflict 해결기 (feat. rebase vs merge)

JoJobum 2022. 8. 18.

처음 git을 사용할 때 add, commit, push, merge (사실 혼자 할때는 merge도 거의 사용하지 않았다) 밖에 사용하지 않았는데,

갑자기 프로젝트를 진행하다가 merge 말고 rebase으로 해달라는 팀원의 요청을 듣고 rebase가 merge??... 싶었다 ㅎㅎ;;

 

아마 나와 같은 사람들이 많은 것인지 매우 기초적인 내용이여서인지는 몰라도 구글링하면 잘 설명한 자료가 정말 많았다.

 

그래서 rebase가 뭐냐? 말그대로 re base, 즉 base를 옮긴다는 말이다. 

rebase                                           vs                                                                          merge

merge는 합체라면 rebase는 합치고하자는 하는 브랜치의 내용을 이어 붙이는 것이다.

merge와  rebase의 차이로 인해 발생하는 점은 

 

merge의 경우 여러 개발자들이 협업하다보면 여러 브랜치들이 동시 진행될 것인데 이들이 서로 엉켜 git history가 더러워진다는 것

대신 merge는 merge할 때 발생하는 conflict 를 한번에 처리하면 된다.

 

rebase의 경우 순서대로 commit 한 것처럼 깔끔한 git history를 유지할 수 있게 해준다

대신 각각의 commit들이 conflict가 날때 마다 수정을 계속 해주어야한다.

 

그냥 그림으로 보고 아 그렇구나~~ 하고 넘어가면 쉽다 하지만 인생은 실전...

 

나의 경우 feature/issue-12 브랜치에서 작업을 하고 있었고 다른 브랜치에서 작업한 내용이 main에 먼저 merge 된 상황에서 rebase로 합쳐달라는 요청을 받은 상황이였다.

 

그 상황에서 먼저 해야할 것은

feature/issue-12 브랜치에서 

git rebase main

그러면 이제 rebase가 진행될 것인데, 여기서 conflict 가 단 한개도 발생하지 않고 성공한다면...!! 정말 이상적이겠지만 (코드가 그 만큼 잘 분리되어 작업이 이루어지고 있다는 소리니깐) 하지만 대부분은 conflict가 발생할 것이다.

 

그러면 이제 conflict 메세지가 나오며  IDE가 어디에서 conflict가 났고 원본과 합치려는 버전을 동시에 보여주며 고치라고 할 것이다.

conflict 난 부분 고치고 add (git add -A)하고

git rebase --continue 를 진행하면 된다.

 

이를 매 커밋마다 진행하며 conflict가 발생하면 위처럼 고치고 add 하고 git rebase --continue 를 반복하면 된다.

그리고 다 끝나고 git push -f ( 강제 푸시 ) 로 올리고 끝냈다.

반응형

댓글