merge와 rebase

2023. 3. 3. 20:28·DevOps/Git, Github

Rebase 하기

Git에서 한 브랜치에서 다른 브랜치로 합치는 방법은 두 가지가 존재한다. 하나는 Merge이고, 다른 하나는 Rebase이다. 두 방법의 차이점을 살펴본다.
 

Merge

 
 

Rebase

그림을 보면 어떤 점이 다른 것 같은가? Merge의 경우, 기존의 커밋 히스토리는 남겨두고 merge하고자 하는 브랜치를 기준으로 새로운 커밋이 생긴다. 하지만 Rebase는 기존의 커밋은 사라지고 rebase하고자 하는 브랜치를 기준으로 커밋을 재정렬한다. 개인적으로 두 방법 중에 Merge가 좋은 것 같다. Rebase를 사용하면 커밋이 재정렬되어 깔끔해보이긴 하겠지만 큰 프로젝트에서 전체적인 프로세스 과정을 이해하거나 히스토리를 살펴볼 때는 Merge를 사용하면 이전 기록이 모두 남아있어서 더 좋지 않을까라는 생각이 든다.
 
 
 

Rebase 를 사용한 실습

위 트리를 보면 일자로 알아보기 쉽게 나와있다. 커밋메시지를 제대로 작성하지 않는다면 분명 헷갈릴 여지가 있다. 아직 큰 프로젝트의 개발을 해본 건 아니지만, 개인적으로는 Merge에 한표 던진다.
 
 
 

Conflict 상황 해결하기

나는 Merge를 했을 때의 Conflict에 대해 다뤄보려고 한다. 현재 main에서 1회 commit 후 bugFix로 checkout한 뒤 c1,c2,c3의 commit을 해주었고, main으로 checkout한 뒤 c4,c5,c6의 커밋을 해준 상태(Merge 하기 전 상태)이다. 그리고 merge를 해주었더니 rebase를 했을때와는 다른 결과를 보인다. rebase의 경우 3개의 커밋을 모두 수정해야한다는 뜻으로 오른쪽 파란 글씨로 (1/3) 과 같이 나왔었다. 하지만 merge의 경우, main|MERGING이라고 나온다.

git status를 보면 rebase를 했을 때와 동일한 결과가 나오는 것을 볼 수 있다. 즉, merge를 하던 rebase를 하던 같은 파일을 수정하려고 하면 충돌이 발생한다. 다시 수정을 해주자 !

결과적으로 아래와 같이 merge된 것을 볼 수 있다. rebase처럼 일자로 된 기록이 남는 것 보다 조금 못생기더라도 아래와 같은 히스토리를 남기는 것이 더 좋아보인다.

 
 

'DevOps/Git, Github' 카테고리의 다른 글
  • Github Actions, Slack Webhook 설정
  • Github 정적 웹사이트(블로그) 만들기 (edior + github page)
  • github-flow 전략 연습하기
  • GIT - 브랜치 병합하기(merge)
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오프라인 쿼리
    TypeScript
    PrefixSum
    누적합
    AWS
    파이썬
    인덱서블 타입
    docker
    인터페이스
    삼성기출
    imos법
    Bucket
    python
    CORS
    점 업데이트
    오블완
    구간 업데이트
    컨테이너
    알고리즘
    티스토리챌린지
    docker image
    인덱스 시그니처
    타입스크립트
    segment tree
    S3
    백준
    구간합
    interface
    온라인 쿼리
    도커
    세그먼트 트리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
merge와 rebase
상단으로

티스토리툴바