본문 바로가기
Program Development Tips/Git

[Git] 깔끔한 커밋 히스토리를 원할 땐 git rebase 대신 git merge

by Maccrey Coding 2024. 9. 3.
반응형

 

Git은 소스 코드의 버전 관리를 효율적으로 수행할 수 있는 강력한 도구입니다.

Git의 두 가지 주요 작업 중 git merge와 git rebase는 모두 브랜치 통합에 사용되지만, 결과적으로 커밋 히스토리에 미치는 영향이 다릅니다.

이번 포스트에서는 깔끔한 커밋 히스토리를 유지하고 싶을 때 git rebase가 왜 유용한지, 그리고 git merge와의 차이점을 설명하겠습니다.

1. git merge vs git rebase

1.1 git merge

git merge는 두 브랜치를 병합하여 하나의 브랜치로 합치는 작업을 수행합니다. 병합 작업은 보통 다음과 같은 상황에서 사용됩니다:

  • 특징 브랜치의 통합: 개발 중인 기능 브랜치를 메인 브랜치로 통합할 때 사용
  • 다수의 개발자 작업 통합: 여러 개발자가 작업한 브랜치를 하나로 합칠 때 사용

특징

  • 병합 커밋 생성: git merge는 병합 작업이 완료되면 새로운 병합 커밋을 생성합니다.
  • 커밋 히스토리 유지: 원래의 브랜치 히스토리를 그대로 유지하며 병합합니다.

예시

git checkout main
git merge feature-branch

병합 후 히스토리

*   Merge branch 'feature-branch'
|\
| * Commit from feature-branch
* | Commit on main branch
|/
* Previous commit

병합 커밋이 생성되면서 두 브랜치의 히스토리가 병합됩니다. 이로 인해 히스토리가 복잡해질 수 있습니다.

1.2 git rebase

git rebase는 한 브랜치의 커밋을 다른 브랜치의 커밋 뒤에 붙여 새로운 커밋 히스토리를 만드는 작업을 수행합니다. 주로 다음과 같은 상황에서 사용됩니다.

  • 로컬 커밋을 깔끔하게 유지: 로컬 브랜치에서 작업 중인 커밋을 최신 브랜치 위로 재배치할 때 사용
  • 기능 브랜치의 업데이트: 기능 브랜치를 최신 상태로 업데이트하고 싶을 때 사용

특징:

  • 커밋 히스토리 변경: git rebase는 기존 커밋의 부모를 변경하여 히스토리를 재구성합니다.
  • 병합 커밋 없음: git rebase는 새로운 커밋 히스토리를 만들기 때문에 병합 커밋이 생성되지 않습니다.

예시

git checkout feature-branch
git rebase main

리베이스 후 히스토리

* Commit from feature-branch
* Commit on main branch
* Previous commit

리베이스 작업을 통해 feature-branch의 커밋이 main 브랜치 위로 재배치되어 히스토리가 깔끔하게 유지됩니다.

2. git rebase의 장점

2.1 깔끔한 히스토리 유지

git rebase를 사용하면 커밋 히스토리를 직선형으로 유지할 수 있습니다. 이는 히스토리가 복잡해지지 않고, 변경 사항을 추적하기 더 쉬워집니다.

2.2 병합 커밋 방지

git rebase는 병합 커밋을 생성하지 않기 때문에, 병합 과정에서 발생하는 추가적인 커밋이 히스토리에 포함되지 않습니다. 이로 인해 깔끔하고 이해하기 쉬운 히스토리를 유지할 수 있습니다.

2.3 재배치 후 깨끗한 커밋 기록

리베이스를 사용하면 로컬 브랜치의 커밋을 최신 브랜치 위로 재배치할 수 있으며, 이를 통해 커밋 기록이 더욱 일관되게 유지됩니다.

팀원들이 작업한 기능을 통합하기 전에 리베이스를 통해 커밋을 정리하면, 나중에 병합 시 히스토리가 깔끔하게 유지됩니다.

3. git rebase 사용 시 주의사항

3.1 리베이스는 로컬 브랜치에만 적용

git rebase는 로컬 브랜치에서 사용하는 것이 좋습니다. 이미 원격에 푸시한 커밋을 리베이스하면 충돌이 발생할 수 있으며, 다른 팀원들에게 혼란을 줄 수 있습니다.

원격 브랜치에는 git merge를 사용하는 것이 더 안전합니다.

3.2 커밋 충돌 해결

리베이스 중에는 커밋 충돌이 발생할 수 있습니다. 충돌을 해결한 후에는 git rebase --continue 명령어를 사용하여 리베이스를 계속 진행할 수 있습니다.

git rebase --continue

3.3 리베이스 후 강제 푸시

리베이스 후 원격 브랜치에 푸시하려면 --force 플래그를 사용해야 합니다. 이때, 팀원들과의 협의가 필요할 수 있습니다.

git push --force

 

git rebase는 깔끔한 커밋 히스토리를 유지하는 데 매우 유용한 도구입니다.

git merge와 달리 병합 커밋을 생성하지 않으며, 커밋 히스토리를 일관되게 유지할 수 있습니다.

그러나 리베이스를 사용할 때는 로컬 브랜치에서만 사용하고, 원격 브랜치에는 git merge를 사용하는 것이 좋습니다.

적절한 도구와 전략을 사용하여 소스 코드의 버전 관리를 효율적으로 수행하세요.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형