이제 main/add-coach/new-teams 이렇게 3개의 branch에 대해서 각각 작업을 수행하였으니, 이번 장에서는 add-coach 브랜치와 new-teams 브랜치에 적용한 사항들을 main 브랜치로 합쳐보자.
이때 branch를 합치는 매카니즘은 크게 2가지로 구분된다.
1. merge 방식
: branchA와 branchB의 커밋들을 모두 유지하면서, 이 두 브랜치의 내역을 합친 새로운 커밋 하나를 생성
2. rebase 방식
: branchB의 커밋들을 , branchA의 커밋 이후에 적용시키므로써 두 브랜치를 합치되, 대신 branchB의 가지가 사라짐
(마치 branchA에, branchB를 그대로 이어 붙인 모양)
이제 실제로 merge와 rebase 명령어를 통해 , 두 브랜치를 하나로 합쳐 보자
-> 이때 add-coach 브랜치와 , new-teams 브랜치에 반영된 변경 사항을, main브랜치로 합치는 중 이라는 상황을 기억하자!!
<merge로 합치기>
22.[add-coach 브랜치를 main 브랜치로 merge]
1) git switch main 으로 먼저 현재 작업중인 브랜치를 main 브랜치로 변경
2) git merge add-coach 이후 main 브랜치에 add-coach 브랜치를 merge
- 이렇게 하면 git commit 과 같이 , 자동 커밋 메세지가 적힌 vim 창이 나오는데
- 여기서 wq로 저장을 해야, 비로소 merge가 완료되고
- merge된 새로운 commit이 해당 메세지로 생성된다.
- 또한 merge를 하면 결국 merge된 새로운 커밋이 생기기 떄문에,
- merge된 커밋에서, merge되기 이전 커밋으로 reset으로 되돌리는 것이 가능하다.
Q. merge가 완료된 add-coach 브랜치를 삭제하면?
A. add-coach 라는 브랜치명은 사라지지만, add-coach 브랜치가 겪었던 "커밋"들과 , "그로인한 가지"는 계속 남아있게 된다.
(생각해보면, merge를 한 것이니 그게 맞음)
위 가지 중, 빨간색 가지가 사라진 add-coach 브랜치
[그럼에도 merge를 했기 때문에 add-coach 브랜치의 커밋들은 main 브랜치의 커밋에 속하게 된다!!]
<rebase로 합치기>
- [new-teams 브랜치를 main 브랜치로 rebase]
1) merge 때와는 반대로, rebase 할 new-teams 브랜치로, 현재 작업중인 브랜치를 변경 - git switch new-teams
2) git rebase main 으로 main위에 new-teams를 rebase
- 그러면 main 브랜치의 커밋들 위에, 마치 새로운 커밋들이 생성된 것 마냥 new-teams 브랜치의 커밋들이 올라가게 된다.
- merge와의 차이점은 "새로운 커밋이 생긴것이 아니므로", 커밋 메세지를 작성할 vim창이 뜨지 않는다.
- 단 말 그대로 main 브랜치 위에 new-teams 브랜치를 이어 붙인 모양새가 되므로, main 브랜치가 new-teams에 비해 뒤쳐지게 된다.
23.2 [rebase된 최신 커밋 시점으로 fast-forward]
따라서 git switch main 으로써 main 브랜치로 변경 후
git merge new-teams 로 두 브랜치를 merge하면
- 결과적으로 main 브랜치의 시점이, rebase된 new-teams 브랜치의 시점으로 fast-forward 하게 된다.
-> 이후 new-teams 브랜치마저 삭제하면, 우리가 원했던 것 처럼
add-coach 브랜치와 new-teams 브랜치의 변경 사항이 모두
main 브랜치에 반영되게 된다.