[Git][차원 넘나들기] branch 합치기 복습

mutexlocking·2022년 7월 5일
0

이제 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는 동일
  • 단 merge는 히스토리 상 브랜치의 흔적을 남기고 - [실제 브랜치 사용 내역을 남길 필요가 있을 때] 사용
  • rebase는 히스토리 상 브랜치의 흔적을 남기지 않는다.
    -> 이 경우 브랜치가 매우 많은 실무 프로젝트의 경우, merge로 브랜치들을 남겨놓으면 프로젝트의 진행 내역을 보고 파악하기가 어려울 수 있음.
    -> 반면 rebase는 히스토리를 깔끔하게 정리할 수 있지만,
    팀원들과 이미 공유하고 있는 커밋들에 대해서는 rebase를 사용하지 않는것이 좋다.

이제 실제로 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로 합치기>

  1. [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 브랜치에 반영
되게 된다.

profile
개발자가 되고자 try 하는중

0개의 댓글