본문 바로가기
Git

[Git] branch를 합치는 두가지 방법 - merge/rebase (TODO:심화과정)

by 설총이 2023. 8. 9.

서로 다른 브랜치를 합치는 두 방식

  • merge : 두 브랜치를 한 커밋에 이어붙입니다.
    • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.
    • 다른 형태의 merge에 대해서도 이후 다루게 될 것입니다.
  • rebase : 브랜치를 다른 브랜치에 이어붙입니다.
    • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다.
    • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.
차이: 히스토리(내역)
merge:  브랜치들을 냅두고 끝에다 모아서 병합하여 히스토리가 남고 (브랜치의 사용내역들을 남겨둘 필요가 있을때)
rebase: 곁가지만 잘라다 끝에다 모아서 병합 (히스토리를 깔끔하게 만드는게 중요할때)

 

- 초기 branch정보 (origin/main은 github 미리 연동해놓은 것)

- 브랜치 정보
1) main

2) add-coach
3) new-teams

- 작업방식
1) main에 add-coach merge
2) main에 new-teams rebase

- 순서정리
1) merge
switch main

    > merge add-coach
        > delete add-coach ( main 브랜치에 add-coach소스를 merge하고 add-coach삭제)

2) rebase
switch new-teams
    > rebase main
        > switch main
            > merge new-teams 
                > delete new-teams
( main 브랜치에 new-teams소스를 rebase하고 new-teams소스를 merge하고 new-teams삭제)
===> 심화과정에서 추가 재정리필요

 

1. merge로 합치기

  • main branch로 switch 해논 상태에서
git merge add-coach

결과)

 

💡 merge는 reset으로 되돌리기 가능하다

  • merge도 하나의 커밋
  • merge하기 전 해당 브랜치의 마지막 시점으로
git reset --hard (돌아갈 커밋 해시정보)

결과)

 

병합된 브랜치는 삭제

git branch -d add-coach

결과)

 

2. rebase로 합치기

new-teams 브랜치를 main 브랜치로 rebase

  • new-teams 브랜치로 이동
    • 🛑 merge때와는 반대!
git rebase main

결과)

 

rebase를 했을 때, main 위치가 new-teams의 마지막 커밋까지 반영되지 않은 상태로
main branch로 이동 후, new-teams것을 merge해주어야 한다.
이유는 심화과정으로 들어가서 추가 작업

 

3. rebase로 합친것을 나머지것을 main branch에 merge

git merge new-teams

결과)

 

병합된 브랜치는 삭제

git branch -d new-teams

결과)