[Git] Git 리베이스: 작업 브랜치의 변경 사항을 최신 상태로 유지하는 방법

2024. 3. 19. 23:16Git

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형

소프트웨어 개발에서 협업은 중요한 요소입니다. 하지만 여러 명이 같은 코드베이스에서 작업하다 보면 복잡한 작업 흐름과 충돌이 발생할 수 있습니다. Git에서 제공하는 리베이스(Rebase)는 이러한 문제를 해결하고, 작업 흐름을 보다 체계적으로 관리할 수 있게 도와줍니다.

이번 포스트에서는 rebase에 대해 알아봅시다.

 

Rebase란?

Rebase는 Git에서 브랜치를 다른 브랜치의 기준으로 옮기는 것을 의미합니다. 이는 브랜치의 커밋 기록을 변경하거나 재정렬하는 과정입니다. Rebase를 하면 현재 브랜치의 commit(커밋)들을 다른 브랜치 위에 올려놓고, 마치 그 브랜치에서 직접 커밋한 것처럼 보입니다.

 

브랜치의 커밋 history(기록)를 깔끔하게 유지하기 위해 사용됩니다. 여러 명이 함께 작업하기 때문에 커밋들이 복잡해질 수 있는데 Rebase를 통해 이를 정리할 수 있습니다.

다른 브랜치의 최신 변경 사항을 통합하기 위해 사용됩니다. Rebase를 통해 다른 브랜치의 변경 사항을 현재 작업 중인 브랜치에 반영할 수 있습니다.

 

 

다이어그램을 통한 Rebase 이해하기

        A---B---C feature
       /
  D---E---F---G main

 

 

main 브랜치는 프로젝트의 메인 브랜치로 가장 최신으로 반영된 변경 사항은 G 커밋입니다.

feature 브랜치는 main 브랜치 E 커밋에서 새롭게 분기된 브랜치입니다. 그 후 main 브랜치와는 별도로 발전해 온 A, B, C 커밋을 포함하고 있습니다. 이러한 상황에서 Rebase를 수행하면 feature 브랜치의 커밋들을 main 브랜치의 최신 커밋 위에 올려놓을 수 있습니다.

 

                    A'--B'--C' feature
                   /
  D---E---F---G main

 

이를 통해 개발 브랜치가 main 브랜치의 최신 상태를 반영하면서도 개발 작업을 계속할 수 있습니다. 이는 충돌을 최소화하고 작업을 원활하게 진행할 수 있도록 도와줍니다.

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

 

기반 브랜치(base branch)에 merge 된 이후, rebase 예시

1. 현재 원격 저장소에 있는 모든 브랜치의 최신 상태를 확인하고, 로컬 저장소에 해당 정보를 가져옵니다.

실제로 로컬 저장소에는 아무런 변경 사항이 반영되지 않습니다.

git fetch --all


2. main 브랜치(기반 브랜치)로 변경합니다.

git checkout main


3. origin/main 브랜치의 최신 커밋 위로 재배치합니다.

git rebase origin/main


4. 다시 feature 브랜치(작업 브랜치)로 변경합니다.

git checkout feature


5. feature 브랜치를 main 브랜치의 최신 커밋 위로 재배치합니다.

git rebase main

 

6. 이전에 origin/feature에 push(푸시)한 이력이 있기 때문에 이력을 강제로 업데이트해야 합니다.

git push -f


7. 작업 재시작!

git push -f (강제 푸시)에 대한 이해

주로 개발 과정에서는 로컬에서 작업한 후 원격 저장소에 변경 사항을 반영합니다. 하지만 때로는 이전에 이미 푸시(Push)한 변경 사항을 수정하거나 제거해야 할 때가 있습니다. 이때 강제 푸시를 사용하여 원격 저장소의 이력을 강제로 업데이트할 수 있습니다. 

*다른 개발자들과 협업하는 브랜치에는 작업에 영향을 줄 수 있으므로 사용을 지양하는 것이 좋습니다. 

함께 작업 중인 브랜치에 rebase를 받아야 할 때, 예시

1. 우선 로컬의 작업 내용을 커밋합니다.

git add .
git commit -m "commit message"

 

2. 원격 브랜치에서 변경 사항을 가져옵니다. 작업 브랜치는 feature입니다.

git fetch origin feature

 

3. rebase 받기

git rebase origin/feature

 

4. 필요 시 충돌 해결하기

해당 파일의 충돌을 해결합니다. 해결된 파일을 스테이징 합니다.

git add .

 

rebase를 이어갑니다.

git rebase --continue

 

*참고로 rebase 취소 명령어 git rebase --abort 입니다.

 

5. 필요 시 원격 브랜치에 강제 푸시합니다.

git push -f




리베이스는 git에서 중요한 작업 흐름 중 하나입니다. 올바르게 사용하면 이력의 가독성을 향상하고 작업을 보다 체계적으로 관리할 수 있습니다. 하지만 잘못 사용할 경우 커밋 이력을 손상시킬 수 있으므로 주의 있게 사용하시길 바랍니다. 이렇게 rebase에 대해 알아보았습니다.

 

 

 

[Utility] 쉽고 간편하게 디자인하기 : 캔바(Canva) 사용법

많은 사람들은 전문적인 디자이너가 아니라면 디자인 작업을 시작하는 것이 어렵다고 생각합니다. 이는 복잡한 디자인 프로그램의 사용에 대한 부담 때문일 수 있습니다. 그러나 제가 소개드리

dev-chim.tistory.com

 

 

[AI] 빙챗(Bing Chat)/코파일럿(Copilot) 설치 방법 및 간단 사용법

빙챗(Bing Chat)은 사용자의 검색 경험을 향상하기 위해 AI 기반으로 마이크로소프트에서 개발한 채팅 기능입니다. 빙챗은 이제 마이크로소프트 코파일럿(Copilot)으로 브랜드명이 변경되었습니다.

dev-chim.tistory.com

 

 

[CSS] 마크업(markup)할 때, img vs background-image 선택하는 기준은?

background-image와 img는 모두 이미지를 웹 페이지에 표시하는 데 사용되는 요소들이지만, 사용되는 목적에 따라 다르게 활용됩니다. 마크업(markup)할 때, img vs background-image 선택하는 기준에 대해서

dev-chim.tistory.com

 

 

[Safari] 개인 정보 보호의 첫걸음: 프라이버시 모드 알아보기

프라이버시 모드란? 웹 브라우저에서 제공하는 기능 중 하나로, 사용자의 브라우징 활동을 익명으로 유지하고 개인 정보를 보호하는 데 도움을 주는 모드입니다. 이 모드에서는 브라우징 기록,

dev-chim.tistory.com

 

 

[npm] npm 버전 확인, 초기화, 설치 및 옵션, 삭제 등 기본 사용법

npm(node package manage)는 cdn 방식으로 패키지를 가져와서 사용하는 것이 아니라, 모듈화 된 패키지를 node 환경에서 쉽고 간편하게 설치하고 버전 관리할 수 있는 자바스크립트 패키지 매니저입니다.

dev-chim.tistory.com

 

반응형