Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • hash
  • dfs
  • 백준
  • Stack
  • java
  • JSP
  • AWS
  • 재귀
  • MySQL
  • 주간 학습 계획
  • EC2
  • BFS
  • 문자열
  • 완전탐색
  • MVC
  • 자료구조
  • github
  • sql
  • GIT
  • 해시
  • 알고리즘
  • 이코테
  • 면접을 위한 CS 전공지식 노트
  • 자바
  • 파이썬
  • 이분탐색
  • JPA
  • 프로그래머스
  • 정렬
  • 인프런

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

[Git, Github] 리베이스 rebase 활용 연습
Git, Github

[Git, Github] 리베이스 rebase 활용 연습

2022. 3. 26. 19:40

헷갈리는 rebase 에 대해 정리하고 실습하는 시간을 가져보자 !!


1.  rebase 는 언제 사용할까 ?

아래 이미지로 히스토리 상태를 확인해보자. 

현재 master 브랜치와 A 브랜치가 머지된 상황이고, 여기서 원하는 작업은 master 브랜치와 B 브랜치와 머지를 진행하려고 하는데..

master 2 [ccf4602] 커밋에서 A, B 브랜치가 나눠졌고, master 브랜치와 B 브랜치의 fast-forward 머지가 불가능한 상황이다 !

(혼동하지 않기 위해 A 브랜치를 따로 삭제하지는 않았다 😀)

3-way-merge 가 불가피한 상황인데, 이럴 때 깔끔한 머지를 위해 rebase 를 사용할 수 있다.


2. 예시

reabse 가 항상 헷갈렸었는데 간단하게 생각하면 ..

옮기고 싶은 브랜치의 최신 커밋을 HEAD 가 가리키도록 해주고,  옮길 위치를 적어주면 끝난다. 아래 예시를 확인 ~

B 브랜치를 rebase 하고 싶다면 ? git checkout rebaseTest-b

master 브랜치 뒤로 옮기고 싶다면 ? git rebase master

그렇다면 직접 명령어를 사용해서 시도해보자.

B 브랜치를 rebase 하고 싶기 때문에 checkout 또는 switch 명령어 사용 후 master 뒤로 붙여주자.
master 와 B 브랜치는 이제 3-way-merge 가 아닌 fast-forward 머지가 가능해졌다 !
master 브랜치와 B 브랜치가 fast-forward 머지된 것을 확인할 수 있다 ~


3. 사용 시 주의사항

cherry-pick 글에도 적었지만 rebase 명령어 또한 커밋 고유 번호인 체크섬이 바뀌기 때문에 다른 개발자와 같은 브랜치 내에서 협업할 때, 이미 원격 저장소에 푸쉬된 커밋은 rebase 를 사용하지 않는 것을 권장한다. (충돌이 발생할 수도 있으니까)

 

4. 궁금증

직접 몸으로 때워보는 시간

 

첫 번째 궁금증)

위 예시와 반대로 하면 어떻게 될까 ?

즉, 현재 master 브랜치와 B 브랜치가 머지된 상황이고, master 브랜치 뒤로 A 브랜치를 rebase 한다면 ?

A 브랜치가 아닌 B 브랜치와 master 브랜치가 머지된 상태

위 예시와 순서만 바뀔 뿐 rebase 가 잘 된 것을 확인할 수 있다. (원리를 이해하니 왜 반대로 됐는지 이해할 수 있었다 👍)

git rebase master 명령어 이후 히스토리 상태 (B 브랜치도 필요없기 때문에 지워줬다)


두 번째 궁금증)

HEAD 가 가리키는 커밋이 브랜치의 최신 커밋이 아닌 상태에서 해당 커밋 하나만 rebase 해서 다른 브랜치 뒤로 옮길 수 있을까 ?

HEAD 가 가리키는 커밋을 각 브랜치의 최신 커밋이 아닌 커밋으로 바꾸고 master 브랜치 최신 커밋 뒤로 옮겨보자.

이 상태에서 git rebase master 명령어를 사용하면 test-a-2 [8561611] 커밋 뒤로 test-b-1 [7a71c33] 커밋이 옮겨질까 ?

HEAD 가 test-b-1 [7a71c33] 을 가리키고 있는 상태

가지 순서가 좀 바뀌긴 했지만 아무 문제 없이 원했던 커밋 뒤로 옮겨진 것을 확인할 수 있다 !

이후 git branch -f master 명령어를 사용해서 HEAD 가 있는 곳으로 master 브랜치를 옮겨주고 checkout, switch 로 HEAD 가 

master 브랜치를 가리키도록 하면 작업 완료 👍

음.. 근데 이렇게 하나만 옮길 꺼면 cherry-pick 을 사용해도 되지 않나 ..? ㅋㅋㅋ

아무튼 궁금증 해결 ㅎ_ㅎ

'Git, Github' 카테고리의 다른 글

[Git, Github] 리베이스 rebase --onto 활용 연습  (0) 2022.03.26
[Git, Github] 체리픽 Cherry-Pick 활용 연습  (0) 2022.03.26
    'Git, Github' 카테고리의 다른 글
    • [Git, Github] 리베이스 rebase --onto 활용 연습
    • [Git, Github] 체리픽 Cherry-Pick 활용 연습
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바