먼저 git pull
과 git pull --rebase
, 그리고 rebase
의 차이를 알아보자.
git pull
은 원격 저장소(remote)에 있는 최신 상태를 로컬 저장소로 받아와서 병합하는 명령어이다.
git fetch
fetch
의 경우에는 remote에서 최신 데이터가 있는지 해당 메타 데이터를 업데이는 하는 것이다. pull과의 차이는 가져온 파일에 대하여 merge를 수행하는지 여부이다. 단순히 원격 저장소의 내용을 확인만 하고 병합은 원치 않는 경우 사용한다.(pull = fetch + merge)
--rebase
옵션을 사용하면 Commit 이력을 한 줄로 깔끔히 관리 할 수 있다.
--rebase
옵션을 사용하면 remote의 Commit 이력이 로컬 저장소로 합쳐지고, 로컬 저장소의 변경 사항은 다시 반영된다. 즉, 로컬 저장소에서 변경된 커밋은 갱신되어 hash가 반영된다.pull
과의 가장 큰 차이는 이력을 그대로 전부 남길지, 불필요한 이력은 정리하여 관리할 지의 차이이다.git pull --rebase = fetch + rebase
merge와 동일하게 합치는 역할을 하지만 rebase
가 좀 더 깨끗한 히스토리를 남기는 방법이다. 일을 병렬로 진행 했어도 모든 작업이 차례대로 수행된 것처럼 보인다.
rebase
하게 되면 커밋 히스토리가 보다 깔끔해진다.rebase
하게되면 기존의 커밋을 그대로 사용하는 게 아니고 내용은 같지만 새로운 커밋을 만드는 것이기 때문에 그 점을 알아야 한다.
git rebase -i
과거의 커밋을 통합하거나 수정할 때 사용할 수 있다. 수행하면 아래와 같이 표시된다.
pick 9a54fd4 commit의 설명 추가
pick 0d4a808 pull의 설명을 추가
# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
위의 상황에서 두 번째 줄의 pick을 s로 변경하고 저장하면 두 개의 커밋이 통합된다.
출처