커밋 히스토리가 아래와 같고 현재 checkout된 브랜치가 "topic"일 때:
A---B---C topic
/
D---E---F---G main
다음 명령어 중 하나의 결과는:
git rebase main
git rebase main topic
다음과 같음:
A'--B'--C' topic
/
D---E---F---G main
이 때, A와 F가 동일한 커밋일 경우(Committer Information(name, email)은 달라도 됨)
rebase의 결과는 다음과 같음:
B'--C' topic
/
D---E---F---G main
-i | --interactive 옵션을 활용하여 커밋 메시지 수정, 순서 변경 등 세밀한 작업 수행이 가능합니다. git rebase -i HEAD~n 후 pick(p), squash(s) 키워드를 통해 여러 커밋을 하나의 커밋으로 합칠 때 주로 사용합니다.두 브랜치 간의 변경 사항을 현재 브랜치에 병합하는 명령어입니다. git merge topic 일 때, topic 브랜치는 변경이 없으며, 현재 브랜치(예: main)에 topic의 변경 사항이 적용된 merge 커밋이 생성됩니다.
커밋 히스토리가 아래와 같고 현재 checkout된 브랜치가 "topic"일 때:
A---B---C topic
/
D---E---F---G main
다음 명령어의 결과는:
git merge main
다음과 같음:
A---B---C---H topic
/ /
D---E---F---G--- main
git rebase
git rebase -i HEAD~n)main 브랜치에 변경 사항을 반영하기 전에 히스토리를 직선형으로 정리할 때 (github에서 rebase and merge를 실행하면 rebase된 후 fast-forward merge 됩니다.)git merge
origin/[branchName]들에 업데이트만 하고 로컬 브랜치들은 변경하지 않습니다.git merge 또는 git rebase를 통해 변화 내용을 현재 checkout된 브랜치에 적용할 수 있습니다.--all 옵션으로 모든 원격 레포지토리의 변경 사항을 가져올 수 있습니다.git fetch origin [branchname]을 수행한 후 자동으로 현재 checkout된 브랜치에 merge합니다. (--rebase 옵션으로 rebase 가능)git pull origin next는 git fetch origin next과 git merge origin/next를 합쳐놓은 것과 같습니다.(체크아웃된 브랜치에 origin/next의 변경 사항을 merge)git pull은 git fetch와 git merge (또는 git rebase)를 합쳐 놓은 명령어입니다.git fetch는 모든 브랜치의 변경 사항을 가져올 수 있습니다.git fetch
git pull