ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • "git pull" vs "git pull --rebase"
    Git 2021. 4. 7. 09:02

    git pull 과 git pull --rebase의 차이점

     

    1. git pull

    • git pull의 의미는 원격 저장소의 소스를 로컬 저장소로 내려받는(가지고오다) 뜻이다.
    • 로컬 저장소에서도 변경 사항이 생긴 경우(원격 저장소와 로컬 저장소의 형상이 다른 경우를 가정)
      - 이때 "--rebase" 옵션을 사용하지 않고 git pull을 할 경우 Merge Commit(C와 D를 포함)이 만들어진다.
      이 의미는 원격 저장소의 Commit이 마치 브랜치를 따서 Merge가 된 것 처럼 git UI에 보이게된다.
      따라서 이 말은 즉, 원격저장소와 로컬 저장소의 Commit 이력이 전부 유지됨을 뜻한다.

     

    A <-- B <-- X <-- Y  (origin/master)
    A <-- B <-- C <-- D (master) 
    # git pull
                     (origin/master)
                            ↓
    A <-- B <-- X <-- Y <-- E (master)
            ↑                     ↓
             ←<- C <-- D <--←

    # git push

    A <-- B <-- X <-- Y <-- E (origin/master) (master)
            ↑                     ↓
             ←<- C <-- D <--←

     

    2. git pull --rebase

    • "--rebase" 옵션은 Commit 이력을 한줄로 깔끔하게 관리 할 수 있음을 뜻한다.
    • 로컬 저장소에서도 변경 사항이 생긴 경우(원격 저장소와 로컬 저장소의 형상이 다른 경우를 가정)
      - 이때 "--rebase" 옵션을 사용하고 git pull --rebase 할 경우 원격 저장소의 Commit 이력이 로컬 저장소로 합쳐지고, 로컬 저장소의 변경 사항은 재 반영된다.
      즉, 로컬 저장소에서 변경된 커밋(C와 D)은 갱신되어 hash가 변경된다.

     

    A <-- B <-- X <-- Y  (origin/master)
    A <-- B <-- C <-- D (master) 
    # git pull --rebase

                     (origin/master)
                            ↓


    A <-- B <-- X <-- Y <-- C' <-- D' (master)


    # git push

    A <-- B <-- X <-- Y <-- C' <-- D' (origin/master) (master)

     

    결과적으로 git pull 과  git pull --rebase는 어떻게 사용하느냐에 따라 다르지만,
    가장 큰 차이점은 이력을 전부 관리할 것인가 or 불필요한 이력은 필요없으므로 깔끔하게 이력을 관리할 것인가의 차이이다.

    'Git' 카테고리의 다른 글

    Git Tag  (0) 2021.04.13
    "fast-forward-merge" vs "3-way-merge"  (0) 2021.04.12
    git config 설정  (0) 2021.04.05
    Git 정의  (0) 2021.02.05
Designed by Tistory.