ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • git ] 헷갈리는 git 명령어 (1)- merge, rebase
    IT/Education 2021. 4. 12. 23:04
    반응형

    이제는 무언가 소프트웨어 개발을 하면서 소스코드를 git으로 관리하는 것이 당연시 되가고 있다.

     

    git은 그만큼 강력하고 간편하게 소스 코드의 형상을 관리해주는 tool로 자리잡았다.

     

    git을 잘 사용하는 개발자들도 무심코 하다보면 헷갈리는 내용들을 하나 하나 정리를 하면서 내 역량을 키우고자 한다.

     

    그 첫 시작으로 merge와 rebase에 대해서 정리하려 한다. ( 기술면접 때도 물어보는 중요한 개념이다. )

     

    우선 merge와 rebase의 정의에 대해서 생각해본다. 기반이 되는 내용은 git reference라 볼 수 있는 git-scm를 참고.

    ( git-scm.com/book/ko/v2 )

     

    1. merge : branch와 branch를 병합하는 명령어 ( ex feature -> main )
      • merge의 종류는 2가지로 fast-forward merge, 3-way merge
    2. rebase : 말 그대로 base를 재설정한다 볼 수 있고, branch의 base를 재설정하는 명령어
      • 이전의 history ( commit hash ) 가 바뀌는 위험성이 있어 사용시 주의해야한다.

    아래에서 merge와 rebase에 대한 그림을 나타낸다.

     

    merge


    1) 사용되는 명령어 $ git merge hotfix

    - 상황 : fast-forward merge가 이뤄지는 형상으로 hotfix branch가 master 이후 커밋인 형상이다.

    merge 명령어 사용 전 형상
    merge 명령어 사용 후 형상

    fast-forward 형식으로 merge하는 경우는 conflict이 발생 할 수 없다. ( 겹치는 commit이 없기 때문에 )

     

    2) 사용되는 명령어 $ git merge iss53

    - 상황 : 3-way merge가 이뤄지는 형상이며, c4와 c3,c5가 서로 같은 파일을 건들지 않아 conflict이 발생하지 않는다.

               만약, 

    merge 명령어 사용 전 형상

     

    merge 명령어 사용 후 형상

    형상 자체가 위 처럼 branch로 나눠졌다가 합쳐진 것이 그대로 남는 형상으로 기록된다.

    ( history 미관상 좋은 방법은 아니며, public으로 push하기전에 fast-forward 형태로 만들어주는 것이 좋다. )

     

    rebase


    사용되는 명령어 $ git rebase master server

     

     

    rebase 명령어 사용 전 형상

     

    rebase 명령어 사용 후 형상

     

     

    보는 것같이 server에 있던 commit 3,4,10 내용이 최신 master의 c9' 뒤로 붙는 것을 확인 할 수 있다.

     

    반응형

    댓글

Designed by Tistory.