Justin의 개발 로그
Published 2024. 8. 22. 15:22
Git Rebase 프로그래밍/Git&BitBucket
 
ChatGPT
git 에서 rebase를 어떤 용도로 사용하는지와 rebase를 이해하는데 도움이 되도록 step by step으로 실습할 수 있는 실습 가이드를 작성해 줘.
 

 

Git Rebase의 용도

git rebase는 브랜치의 커밋들을 다른 브랜치의 커밋들 위로 재배치하는 데 사용됩니다. 주로 다음과 같은 상황에서 사용됩니다:

  1. 분기된 브랜치와의 커밋 이력을 깔끔하게 합칠 때: git merge는 브랜치들이 합쳐진 시점에서 새로운 커밋(merge commit)을 생성하지만, git rebase는 커밋 이력을 깔끔하게 합쳐 주므로, 히스토리가 직선으로 정리됩니다.
  2. 커밋 이력 정리: 개발 브랜치에서 작업한 후 메인 브랜치에 병합하기 전에 이력을 정리하여, 불필요한 커밋을 제거하거나 커밋을 병합할 수 있습니다.
  3. 리뷰 시 이력 단순화: 여러 명이 협업하는 경우, 리뷰어가 쉽게 리뷰할 수 있도록 커밋 이력을 단순화할 수 있습니다.

Git Rebase 실습 가이드

아래의 가이드에서는 git rebase의 기본적인 사용법과 실제로 어떻게 동작하는지를 단계별로 실습해볼 수 있도록 안내합니다.

실습 준비

  1. 새로운 Git 리포지토리 생성:
    mkdir rebase-demo
    cd rebase-demo
    git init
  2. 메인 브랜치에 첫 번째 커밋 만들기:
    echo "First commit on main" > file.txt
    git add file.txt
    git commit -m "First commit on main"

  3. 새로운 브랜치 생성 후 커밋 추가:
    git checkout -b feature-branch
    echo "Feature commit 1" >> file.txt
    git add file.txt
    git commit -m "Feature commit 1"

    echo "Feature commit 2" >> file.txt
    git add file.txt git commit -m "Feature commit 2"

  4. 메인 브랜치로 돌아가서 커밋 추가:
    git checkout main
    echo "Second commit on main" >> file.txt
    git add file.txt
    git commit -m "Second commit on main"


Step-by-Step Rebase 실습

  1. Rebase 시작:
    • feature-branch를 main 브랜치의 최신 커밋 위로 재배치합니다.
    git checkout feature-branch
    git rebase main
    • 이 명령은 feature-branch의 두 개의 커밋(Feature commit 1, Feature commit 2)을 main 브랜치의 마지막 커밋(Second commit on main) 이후로 이동시킵니다.
    • file.txt의 동일 포인트를 main과 feature-branch 에서 수정했기 때문에 Rebase 과정에서 충돌이 일어나게 됩니다.
# 리베이스 취소 
git rebase --abort

# 또는
# 리베이스 제거 - 아래와 같이 리베이스 하위 경로를 삭제하는 것으로 커밋되지 않은 리베이스를 취소할 수 있습니다.
rm -fr ".git/rebase-merge"

  1. 충돌 해결:
    • file.txt를 열어 충돌을 해결합니다. 충돌을 해결한 후 파일을 저장하고 다음 명령을 실행합니다.
    git add file.txt
    git rebase --
    continue
    • 리베이스 과정이 완료되면 feature-branch는 충돌 해결이 반영된 상태로 main 브랜치 위에 놓이게 됩니다.
  2. Rebase 후 상태 확인:
    • git log 명령을 사용하여 이력이 어떻게 변경되었는지 확인합니다.
    git log --oneline --graph
    • 결과를 보면, feature-branch의 커밋들이 main 브랜치의 최신 커밋 이후에 위치하게 되어, 깔끔한 직선형 커밋 이력이 생성됩니다.
  3. Rebase 후 브랜치 병합:
    • feature-branch를 main 브랜치로 병합합니다.
    git checkout main
    git merge feature-branch
    • 리베이스 후 병합은 보통 Fast-forward로 처리되어, 병합 커밋이 생성되지 않습니다.

주의사항

  • 공유 브랜치에서의 Rebase: 다른 사람이 이미 작업한 커밋이 포함된 브랜치에서 rebase를 하면 히스토리가 변경되므로, 협업 시 혼란을 초래할 수 있습니다. 주의해서 사용해야 합니다.
  • Rebase vs Merge: git rebase는 히스토리를 깔끔하게 정리할 때 유용하지만, git merge는 이력을 보존하는 데 더 유리합니다. 상황에 맞게 선택해서 사용해야 합니다.

이 가이드를 따라하면 git rebase가 어떻게 동작하는지, 그리고 이력을 어떻게 정리하는지 이해할 수 있을 것입니다.

 

rebase reset (롤백)

git reflog

git reset --hard <리베이스 이전 커밋해시>

 

profile

Justin의 개발 로그

@라이프노트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!