git
git rebase vs. git pull —rebase
주먹불끈
2024. 5. 21. 19:00
개요
git pull —rebase 를 쓰자 는 포스팅을 썼음에도 git rebase origin/develop 이라고 쓰고 있다는 것을 자각했다(Pull Request를 develop 브랜치로 하고 있다). 그리고, 이 둘의 차이가 무엇인지 명확히 알지 못한다는 것도 깨달았다.
제대로 정리하고 넘어가자.
TL;DR
git pull --rebase origin develop 를 쓰자
상황
feat/new-fantastic-feature 브랜치에 새로운 기능 구현을 완료하고 Pull Request를 하기 직전이다.
GitHub Repository의 Default branch 설정은 develop 브랜치이다. remote의 develop 브랜치를 rebase 한 다음 깔끔하게 PR을 보내고 싶다.
git pull --rebase origin develop
이 명령은 git pull과 git rebase의 조합이라고 생각하면 된다.
- origin 리모트 저장소로부터 develop 브랜치의 최신 변경 사항을 로컬로 가져온다. 즉, 로컬의 develop 브랜치가 리모트의 최신 상황으로 업데이트 된다.
- 현재 브랜치의 커밋을 origin/develop 브랜치의 최신 커밋 뒤에 재배치한다. rebase 한다는 말이다.
git rebase origin/develop
이 명령은 현재 브랜치의 커밋을 origin/develop 브랜치의 최신 커밋 뒤에 재배치한다.
git pull --rebase origin develop 명령에서의 1, 2번 단계에서 첫번째 단계가 빠지고 두번째 단계만 실행하는 것이다.
origin develop vs. origin/develop
가끔 origin/develop 과 같은 형태의 표현을 보았었는데 정확이 이해를 하지 못하고 쓰고 있었다.
origin/develop → 로컬!
- origin/develop는 리모트 트래킹 브랜치를 의미하며 origin은 원격 저장소의 이름, develop은 원격 저장소에 있는 브랜치의 이름이다.
- 리모트 트래킹 브랜치는 원격 저장소의 브랜치 상태를 로컬에서 추적하는 역할을 한다. 중요한 것은 로컬이라는 것이다.
- 예를 들어, git fetch 명령을 실행하면 origin/develop 브랜치가 원격 저장소의 develop 브랜치와 동기화, 업데이트 된다.
origin develop → 리모트!
- origin develop는 git fetch나 git pull 명령의 인자로 사용되는 경우가 많다.
- 마찬가지로 origin은 원격 저장소의 이름이고, develop은 원격 저장소의 브랜치 이름이다.
- 이 표현은 주로 원격 저장소에서 특정 브랜치를 가져올 때 사용한다. 실제 리모트 브랜치이다.
비교와 차이점
핵심은 로컬의 origin/develop 브랜치가 리모트의 origin develop 브랜치보다 뒤쳐저 있을 수 있다는 것이다.
- 역할과 사용 맥락:
- origin/develop: 리모트 트래킹 브랜치로, 로컬 저장소에 있는 원격 브랜치이다.
- origin develop: 명령어의 인자로 사용되며, 원격 저장소 origin에서 브랜치 develop을 지정하는 역할을 한다.
- 명령어 사용:
- origin/develop: 주로 브랜치를 참조할 때 사용한다.
- 예: git checkout origin/develop, git rebase origin/develop
- origin develop: 주로 원격 저장소에서 브랜치를 가져올 때 사용한다.
- 예: git fetch origin develop, git pull origin develop
- origin/develop: 주로 브랜치를 참조할 때 사용한다.
예시를 통해 좀더 익숙해지자
- git fetch origin develop:
- origin 원격 저장소에서 develop 브랜치를 가져와 로컬 리모트 트래킹 브랜치 origin/develop을 업데이트한다.
- git rebase origin/develop:
- 현재 브랜치를 origin/develop의 최신 커밋 위로 리베이스한다. origin/develop은 로컬에 있는 리모트 트래킹 브랜치이다.
- git pull --rebase origin develop:
- origin 원격 저장소에서 develop 브랜치를 가져와 현재 브랜치를 그 위에 리베이스한다.
- 이는 git fetch origin develop과 git rebase origin/develop을 한 번에 수행하는 것과 같다.
반응형