[git & github] git이랑 친해지기 ② (git branch, git merge)

2025. 10. 5. 19:57·git & github
반응형

개발을 하다보면 하나의 페이지에서 여러 가지 기능을 구현하거나

새로운 기능을 추가하고 이전의 내용과 비교해야 할 일이 자주 있는데

그럴 때 유용한 branch와 merge에 대해 알아볼 것이다.

 

git branch

우선 branch는 프로그램에 새로운 기능을 추가할 때 만들어지는 복사본 개념이다.

branch의 뜻인 나뭇가지라는 말 그대로 원본에서 복사본이라는 가지를 쳐서 작업하는 것이다. 

이런식으로 복사본을 만들어 작업을 하면 원본을 훼손하지 않고 안전하게 작업할 수 있다

git branch 브랜치이름

 이러면 브랜치가 하나 생성된다.

git switch 브랜치이름
git switch main

다른 branch로 이동하고 싶다면 이렇게 하면 되고

 원본 브랜치으로 돌아가고 싶으면 git switch main(or master) 하면 된다

git status

내가 지금 어디 브랜치인지 모르겠다면 git status로 확인가능하다

 

git merge

생성한 branch에서 작업이 완료되어 main branch로 적용시키고 싶을 때 merge를 사용한다

git switch main
git merge 브랜치명

merge를 하기 위해서는 우선 기준이되는 브랜치로 이동시켜야한다

git switch main을 입력 후 merge를 해주어야 한다

 

git merge 주의사항

만약 이 때 main의 내용과 branch의 내용에서 같은 파일, 같은 줄을 수정했다면

merge를 했을 때 conflict(충돌)이 발생하게 된다

이렇게 됐을 때는 수동으로 직접 우리가 어떤 내용을 남길건지 선택해주고

add, commit 해주면 해결된다

 

merge의 4가지 종류

1. 3-way merge

흔히 아는 가장 기본이 되는 merge 방법이다

main 브랜치와 새로운 브랜치에 각각 1회 이상 commit이 있을 경우 merge를 했을 때

3-way merge라고 한다

병합 커밋은 자동으로 생성된다

 

2. fast-forward merge

 main 브랜치에는 새로운 브랜치를 만든 이후 신규 commit이 없고

새로운 브랜치에는 commit이 있을 경우 merge 했을 때를

fast-forward merge라고 부른다

main에서는 변동사항이 없으니 합치고 뭐 할것도 없이

그냥 일자로 된다고 보면 된다. 새로운 브랜치가 new이자 main브랜치가 되는 것이다

병합 커밋도 생기지 않는다

이 merge 방법의 장점은 시각적으로 좀 더 복잡해보이는 것을 완화시켜준다.

 

이 방법이 싫다면

git merge --no --ff 브랜치명

이렇게 해서 강제로 3-way merge를 해줄 수도 있다.

 

+) 참고로 merge를 한다고 해서 병합된 branch가 삭제되는 것은 아니다

삭제하고 싶다면

git branch -d 브랜치이름 // 병합 완료된 브랜치 삭제
git branch -D 브랜치이름 // 병합 안된 브랜치 삭제

이렇게 해주면 된다

 

3. rebase merge

rebase merge는 강제 fast-forward merge 느낌인데

우선 rebase는 새로운 브랜치의 시작점을 main 브랜치의 가장 최근 commit으로 옮겨주는 행위다

그 후 merge를 해주면 fast-forward merge가 되는데

이것을 rebase merge라고 한다

사용하는 이유는 3-way merge가 아닌 fast-forward merge를 하고 싶을 때 강제로 가능하다

또한 시각적으로 복잡성이 완화되고 commit 내역을 한 줄로 이어나가고 싶을 때 사용한다

 

사용하는 방법은

git swtich 새로운브랜치
git rebase main

일반적인 merge 방식과 다르게 새로운 브랜치로 switch한 후 main을 rebase한다

그리고

git switch main
git merge 새로운브랜치

이런식으로 해주면 fast-forward merge가 발생하게 된다

그러므로 병합커밋도 생성되지 않는다

단점으로는 conflict가 발생하기 쉽다는 것이다

 

4. squash merge 

모든 branch를 3-way merge로 한다면 시각적으로 굉장히 보기 불편해진다

또한 main 브랜치의 git log 출력 시 연결된 브랜치들의 commit 내역도 함께 보여주기에

git log 그래프가 더러워진다

 

이를 해결하기 위해서는 rebase merge 또는 squash merge를 사용해야한다

squash merge는 연결 선이 안생기는 3-way merge라고 생각하면되는데

squash merge는 새로운 브랜치의 내용들이 main 브랜치에 선으로 연결되는 것이 아닌

무선으로 텔레포트 된다고 생각하면 쉽다

 

사용하는 방법은

git switch main
git merge --squash 브랜치명
git commit -m '메세지'

이렇게 해주면 된다

 

squash merge를 하게되면 작업 내용만 순간이동 되고

merge commit(병합커밋)은 자동으로 해주지 않기에 반드시 직접 해줘야 한다

 

rebase merge와 squash merge의 차이로는

rebase merge는 합쳐질 브랜치의 commit 내역이 전부 보존되어 합쳐지지만

squash merge는 합쳐질 브랜치의 commit 내역이 하나로 합쳐져  기준 브랜치에 합쳐진다

위의 두 merge를 설명한 사진을 보면 이해가 바로 될 것이다

참고로 3-way merge는 합쳐질 때 commit 내역이 보존된다

 

merge에 생각했던 것보다 다양한 방식이 있다는 것에
공부하면서 배워갈 것이 많아 의미있었고
branch가 많아지면 많아질수록 어떤 merge를 사용해야 할 지에 대한
판단을 잘해야 할 것 같다는 생각이 들었다
이 글은 강의 내용을 보고 공부한 것을 정리한 글입니다

 

반응형

'git & github' 카테고리의 다른 글

[git & github] git이랑 친해지기 ④ (git flow, Trunk-based 전략)  (0) 2025.10.08
[git & github] github랑 친해지기  (0) 2025.10.07
[git & github] git이랑 친해지기 ③ (git restore, git revert, git reset)  (0) 2025.10.06
[git & github] git이랑 친해지기 ① (git add, git commit, git diff)  (0) 2025.10.04
'git & github' 카테고리의 다른 글
  • [git & github] git이랑 친해지기 ④ (git flow, Trunk-based 전략)
  • [git & github] github랑 친해지기
  • [git & github] git이랑 친해지기 ③ (git restore, git revert, git reset)
  • [git & github] git이랑 친해지기 ① (git add, git commit, git diff)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그레디언트 클리핑
    Spring Boot
    머신러닝
    DL
    오프라인 학습
    github
    Aimers
    list
    Java
    알고리즘
    백준
    ML
    AI
    홀드아웃 검증
    연결리스트
    게시판
    git
    딥러닝
    인공지능
    주성분변환
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[git & github] git이랑 친해지기 ② (git branch, git merge)
상단으로

티스토리툴바