1. Merge
만약 여러 개발자들이 함께 나눠서 작업을 하고, 합치려면 어떻게 해야할까?
여러 branch에서 작업된 것을 합치는 과정을 "merge"라고 한다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/66137ef4-7875-4bbe-8290-a06f2c1b60a6/image.png)
1) fast-forword : 간단한 branch 합병
가장 간단한 경우로서, 한 브랜치에서는 변경사항이 없지만 한 브랜치에서는 새로운 기능이 생긴 경우이다!
![](https://velog.velcdn.com/images/dreamcomestrue/post/d7419da3-69e7-4f96-91b7-109615eab6aa/image.png)
이 경우 단순히 참조값을 변경하여 두 branch를 합칠 수 있다
![](https://velog.velcdn.com/images/dreamcomestrue/post/0caab2eb-fa9c-48be-a53f-9543f38946a8/image.png)
![](https://velog.velcdn.com/images/dreamcomestrue/post/f37a81d5-874f-405b-b3ce-e57214495090/image.png)
2) 3-way merge : 복잡한 branch 합치기
실제로 두 브랜치에서 모두 변경사항이 발생한 경우 어떻게 합칠 수 있을까?
![](https://velog.velcdn.com/images/dreamcomestrue/post/0d24c384-d81c-45f8-be74-b5395ac24b68/image.png)
두 변경사항을 모두 보고 비교하는 과정이 필요하다 !
![](https://velog.velcdn.com/images/dreamcomestrue/post/271a3d42-2f20-4241-9797-84b2e73a4c65/image.png)
git에서는 두 브랜치가 갈리지기 이전의 베이스인, c2 커밋도 함께 비교한다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/0476840c-8f70-49ac-9dc2-6e7851bb76d2/image.png)
우리는 feat/a, feat/b와 같은 모습들로 파일을 보게되지만 실제로 git에 저장된 내용은 오른쪽과 같이 저장되어 있다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/403af8af-1ca7-46ec-a93e-4d51ec911a00/image.png)
아래와 같은 방식으로 merge한다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/eea896b3-8e1c-4543-a748-2f694b48d388/image.png)
그리고 저장을 위해 'm1' 커밋을 만들어 준다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/9bc0eccf-8952-4cb3-ad38-ab40dcfd31e1/image.png)
![](https://velog.velcdn.com/images/dreamcomestrue/post/c0a3d0f9-ff40-4d0f-ac20-f249a51d31b6/image.png)
![](https://velog.velcdn.com/images/dreamcomestrue/post/cb25ab2e-e4ef-40b7-bfd0-4fd0f67051a0/image.png)
2. Conflict
실제 협업을 하며 개발할 때에, 변경 사항의 충돌하는 경우가 빈번하게 발생한다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/1ff1e457-d1c2-4798-8500-b356f14c4d04/image.png)
![](https://velog.velcdn.com/images/dreamcomestrue/post/fbf5c045-05a6-4dad-80b8-71ed34aa3bff/image.png)
=> 이것을 'conflict'라고 한다!
conflict는 에러나 잘못된 것이 아니라 git이 해결할 수 없는 부분을 우리에게 선택하도록 하는 것이다!
즉 해당 부분을 고쳐서 실제 변경사항을 넣어주면 된다.