Github를 사용하다보면 branch를 생성하고 add, commit, merge, rebase, push.. 뭔가 할일이 많다.
공부해야할게 많다. 그 중 병합에 대해 오늘은 끄적여보고자 한다.
merge
와 rebase
둘 다 2개의 branch를 병합하는 방법이다. 뭐가 다를까?
간단한 그림으로 알아보고자 한다.
이 상태에서 master에서 새로운 feature branch를 생성하여 추가로 작업을 하였다.
$git checkout -b feature/sample
$git commit -m "commit a"
$git commit -m "commit b"
그러면 현재의 git object의 상태는 그림과 같다.
그래서 그림과 같이 새로운 branch를 생성하여 작업하고 Master와 다시 병합하였다.
$git checkout master
$git checkout -b hotfix/typo-err
$git commit -m "hotfix"
$git checkout master
$git merge hotfix/typo-err
그럼 위와같이 HEAD가 이동하였고, cli에는 fast-worward
라는 내용을 확인할 수 있다.
빨리감기 라고도 하며 branch의 head가 이동했다는것을 의미한다.
$git checkout master
$git merge sample-branch
위와같이 merge를 하게되면 새로운 커밋이 생성되며 갈래가 나갔다가 다시 합쳐지는 형태로 생성되며
새로운 commit이 자동으로 생성된다. (위 그림에서 xxx 커밋)
이러한 형태를 3-way Merge
라고 부른다.
간단한 그림으로 알아보고자 한다.
$git checkout -b feature/sample
$git commit -m "commit a"
$git commit -m "commit b"
$git checkout master
$git checkout -b hotfix/typo-err
$git commit -m "hotfix"
$git rebase master
$git rebase master
feature/sample
의 branch꼬리를 master에 가져다 붙였다. 이제 master에서 merge를 하면깔끔하게 fast-forward
가 이루어 진다.
merge보다 rebase가 이력관리가 더 깔끔하다. (가지가 나갔다가 들어갔다가 하지않기 때문에). 때문에 실무에서는 rebase가 대부분 사용하고 있는데, 어떤 차이가 있는지 왜 rebase를 쓰는지 조금이나마 이 글을 정리하면서 이해가 되었다.