ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • git rebase와 git merge의 차이점
    Git&GitHub 2025. 1. 10. 23:21

    git에서 두 개의 브랜치를 합치는 명령어 rebase, merge에 대해서 설명하고, 차이점에 대해 정리해둔 문서입니다.

    차이점 (1) 병합의 방식 (2) 사용하는 상황


    (1) 병합의 방식

    rebase :

    히스토리가 직선형으로 정리되며, 브랜치 간의 작업 병합 흔적이 사라집니다. 이 과정에서 새 커밋 해시를 생성하므로, 히스토리가 변경됩니다.

     


             D -- E(experiment)

            /

    A -- B -- C(main)

    $git chekcout experiment
    $git rebase main

     

    A  --  B  --  C (main)  --  D'  --  E' (experiment)


    => B 브랜치를 베이스로 새로운 가지를 만들었던 사실이 사라지고, main 브랜치 커밋 위로 experiment 브랜치의 커밋들이 쌓입니다. 커밋해시가 변경되기 때문에  D', E'로 표현합니다.

     

     

     


    merge :

    두 브랜치를 병합하며, 히스토리를 보존합니다. 두 브랜치의 커밋을 합쳐 새로운 커밋을 생성합니다.


     

             D -- E(experiment)

            /

    A -- B -- C(main)

     

    $git checkout main
    $git merge experiment

     

             D -- E(experiment)

            /         \

    A -- B -- C -- F (main)


    => main과 experiment 브랜치의 커밋 내용이 병합돼 새로운 F라는 커밋이 생성되고, main 브랜치는 병합된 F 커밋의 상태로 존재합니다.

     

     

     


     

     

    (2) 사용하는 상황

    일반적으로 커밋 히스토리에 대한 두 가지 관점이 존재합니다.

     

    - opinion1 : Repository’s commit history is "story of how your project was made"
    - opinion2 : Repository’s commit history is "record of what actually happened"

     

    프로젝트가 어떻게 만들어졌는가에 대한 이야기 VS 실제로 일어난 일에 대한 기록

     

    이 관점에서는 커밋 히스토리를 깔끔하고 논리적으로 정리하려고 합니다.
    주로 rebase를 사용하여 불필요한 커밋을 제거하거나, 작업 과정을 재구성합니다.
    이 관점에서는 커밋 히스토리가 작업의 모든 과정을 충실히 반영해야 한다고 봅니다.
    주로 merge를 사용하여 작업 내용을 있는 그대로 보존합니다.

     

    rebase는 히스토리를 정리할 때 유용하지만, 커밋이 삭제되거나 변경될 수 있기 때문에 협업 환경에서는 주의해서 사용해야 합니다. 특히, 공개된 브랜치에서의 rebase는 이전 작업이 없어질 위험이 있으므로 권장되지 않습니다.


    참고 : Git 브랜칭 - 리베이스 (https://git-scm.com/book/en/v2/Git-Branching-Rebasing)

    'Git&GitHub' 카테고리의 다른 글

    Git & GitHub 관련 명령어 모음  (0) 2025.01.11
    git fetch와 git pull의 차이점  (0) 2025.01.10
Designed by Tistory.