-
"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