출처: https://im-developer.tistory.com/182
GitHub은 아래 3가지의 Merge Button이 가능해요.
Merge Commit
Squash Merging
Rebase Merging
저장소에 맞게 허용 가능한 병합 방법을 Settings > Merge button
에서 설정해주세요. 프론트엔드에서는 커밋 히스토리를 간소화하고 쉽게 cherry-pick과 revert를 할 수 있도록 Squash Merging
만 허용하고 있어요.
$ git checkout -b my-branch
하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합치는 방법이다.
commit a, b, c를 refer하는 m이 생성되고 m을 통해 a + b + c가 master에 추가된다.
m은 2개의 parent를 가진다.
$ git checkout master
$ git merge my-branch
commit a + b + c를 합쳐서 새로운 commit, abc를 만들어지고 master에 추가된다.
abc는 1개의 parent를 가진다.
feature 브랜치의 commit history를 합쳐서 깔끔하게 만들기 위해 사용한다.
$ git checkout master
$ git merge --squash my-branch
$ git commit -m "your-commit-message"
모든 commit들이 합쳐지지 않고 각각 master 브랜치에 추가된다.
각 commit은 모두 하나의 parent를 가진다.
$ git checkout my-branch
$ git rebase master
$ git checkout master
$ git merge my-branch
Merge는 Merge commit 기록이 추가로 남게 되지만 Rebase의 경우에는 branch 병합 시 Merge commit 기록이 남지 않는다. 따라서 마치 하나의 브랜치에서 작업한 것처럼 보여진다.