git 병합
git branch --merged //브랜치 병합 여부 확인
깃에서 사용되는 병합 방식에는 두가지가 있다.
fast forward병합과 3-way병합이다.
전자는 주로 순차적으로 커밋한 경우 한 줄로 병합하는 것을 의미한다. 주로 혼자 작업할 경우 이 병합이 사용된다.
반면 후자는 여러 사람과 작업하는 경우 기준 커밋을 기점으로 서로 다른 브랜치의 커밋들이 연결되어 복잡하다.
그림을 보면 이해가 쉽다.
1. fast-forward병합
master브런치에서 develop브런치가 분기한 이후 master에는 더 이상의 커밋이 없고 순차적으로 커밋된 경우,
master브런치에서 merge하면 fast-forward병합이 이루어 진다.
2. 3-way 병합
공통 조상인 base커밋을 기점으로 병합 커밋을 하나 만들어서 커밋하는 것을 말한다.
병합할 때는 충돌할 수 있는데, 해당 내용을 수정하고 커밋해야 병합 커밋이 만들어진다.
이때, 3-way 병합과 rebase와 헷갈릴 수 있는데 둘의 차이점은 병합 커밋에 있다.
rebase는 병합 커밋이 만들어지지 않고 브런치의 커밋이 연결되어 한 줄로 만들어지는 형태이다.
이 때 feature브런치에서는 마지막 커밋을 가리키고 있지만, master브런치는 master브런치의 마지막 커밋을 가리키고 있기 때문에 HEAD포인터가 같지 않다. 따라서 rebase한 이후 fast-forward병합이 필요하다.
rebase는 merge와는 반대로 리베이스 되는 브런치로 이동해서 rebase 명령어를 사용해야 한다.
다시 말해 feature브런치로 이동해서 git rebase master를 사용해야 한다.