Git을 기본적으로 사용할 줄 안다면, 그 다음 단계는 더 효율적으로 브랜치를 관리하고 커밋을 정리하는 방법을 익히는 것입니다. 이번 포스트에서는 Git의 고급 사용법 중 일부인 Rebase와 Merge의 차이, Interactive Rebase를 활용한 커밋 정리, 그리고 Git Stash의 사용법에 대해 다뤄보겠습니다. 이를 통해 협업 중 깔끔한 커밋 기록을 유지하고, 작업 도중에도 언제든지 다른 브랜치로 쉽게 전환할 수 있게 될 것입니다.
1. Rebase와 Merge의 차이
Merge란 무엇인가?
git merge
는 두 브랜치를 병합하는 명령어로, 주로 기능(feature) 브랜치를 메인 브랜치에 합칠 때 사용됩니다. Merge는 두 브랜치의 커밋 내역을 유지하면서 새로운 병합(merge) 커밋을 생성하여 브랜치들을 통합합니다.
예를 들어, feature
브랜치를 main
브랜치에 병합한다고 하면 다음과 같은 형태로 병합 커밋이 생성됩니다:
A---B---C (main)
\
D---E (feature)
git merge
명령어를 실행하면 다음과 같은 병합 커밋이 만들어집니다:
A---B---C-------F (main)
\ /
D---E (feature)
병합 후에는 두 브랜치의 모든 변경사항이 합쳐진 새로운 커밋 F
가 생성됩니다. 이 방식은 각 브랜치의 독립성을 유지하고, 커밋 히스토리가 브랜치의 작업 흐름을 그대로 반영하도록 해줍니다.
Rebase란 무엇인가?
git rebase
는 한 브랜치의 커밋들을 다른 브랜치의 커밋 위로 재배치하는 명령어입니다. 이를 통해 병합 커밋 없이 깔끔한 히스토리를 유지할 수 있습니다. Rebase를 사용하면 두 브랜치의 변경 사항을 합치되, 브랜치 히스토리가 선형(linear)으로 보이도록 할 수 있습니다.
예를 들어, feature
브랜치를 main
브랜치에 Rebase 한다면 다음과 같이 커밋 내역이 변경됩니다:
A---B---C (main)
\
D'---E' (feature)
여기서 D'
와 E'
는 기존 feature
브랜치의 커밋을 main
브랜치 위에 재배치한 것입니다. Rebase 후에는 히스토리가 선형적으로 연결되어, 협업 시 리뷰나 추적이 더 쉬워집니다.
Merge와 Rebase의 선택 기준
- Merge: 기존의 브랜치 구조와 히스토리를 보존하고 싶을 때 사용합니다. 특히 여러 명이 협업 중일 때는 Merge를 통해 각자의 작업 흐름을 명확하게 유지하는 것이 좋습니다.
- Rebase: 히스토리를 깔끔하고 선형적으로 유지하고 싶을 때 사용합니다. 개인적인 작업을 정리하거나, 메인 브랜치에 합치기 전에 작업 내용을 정리하고 싶을 때 유용합니다.
2. Interactive Rebase로 커밋 정리하기
Interactive Rebase란?
git rebase -i
는 특정 범위의 커밋들을 정리하거나 수정할 수 있도록 해주는 강력한 도구입니다. 이를 통해 커밋 메시지를 변경하거나, 여러 개의 커밋을 하나로 합치거나(squash), 불필요한 커밋을 삭제할 수 있습니다. 이는 특히 팀에 작업 내역을 공유하기 전에 커밋을 깔끔하게 정리하는 데 유용합니다.
사용 방법
예를 들어, 최근 5개의 커밋을 정리하고 싶다면 다음 명령어를 사용합니다:
git rebase -i HEAD~5
이 명령어를 입력하면 텍스트 편집기가 열리면서 최근 5개의 커밋 목록이 나타납니다. 각 커밋 앞에는 pick
이라는 키워드가 붙어있는데, 이를 다른 키워드로 변경하여 각 커밋을 어떻게 처리할지 결정할 수 있습니다.
pick
: 커밋을 그대로 유지합니다.reword
: 커밋 메시지를 수정합니다.edit
: 커밋 내용을 수정할 수 있습니다.squash
: 이전 커밋과 합칩니다.fixup
: 이전 커밋과 합치되, 메시지는 유지하지 않습니다.
예를 들어, 불필요하게 여러 개로 나눠진 커밋들을 하나로 합치고 싶다면 squash
를 사용하여 커밋들을 합칠 수 있습니다. 이렇게 정리된 히스토리는 팀원들이 변경 사항을 쉽게 이해할 수 있도록 도와줍니다.
주의사항
Interactive Rebase를 사용할 때는 현재 작업 중인 브랜치가 다른 사람들과 공유되지 않은 상태여야 합니다. 공유된 브랜치에서 Rebase를 사용하면 다른 팀원들의 작업에 충돌을 일으킬 수 있습니다.
3. Git Stash 사용하기
Stash란 무엇인가?
작업 중이던 내용을 임시로 저장하고, 나중에 다시 적용할 수 있는 기능이 git stash
입니다. 예를 들어, 현재 작업 중인 코드가 완성되지 않았지만 급히 다른 브랜치로 전환해야 할 때 유용하게 사용할 수 있습니다.
git stash
를 사용하면 현재 작업 디렉터리의 변경 사항을 모두 저장하고, 변경 사항이 없는 깨끗한 상태로 브랜치를 전환할 수 있습니다.
기본 사용법
작업 중인 내용을 Stash에 저장하려면 다음 명령어를 사용합니다:
git stash
이 명령어를 실행하면 현재 변경된 파일들과 staged 상태의 파일들이 모두 임시 저장됩니다. 이후 원래 작업하던 브랜치로 돌아와서 저장된 내용을 다시 적용하려면 다음 명령어를 사용합니다:
git stash apply
이렇게 하면 Stash에 저장된 변경 사항이 다시 작업 디렉터리에 적용됩니다.
Stash 목록 확인 및 관리
여러 번 git stash
를 사용하면 Stash가 여러 개 쌓이게 됩니다. 저장된 Stash 목록을 확인하려면 다음 명령어를 사용합니다:
git stash list
이 명령어를 실행하면 각 Stash에 대한 목록이 나타납니다. 특정 Stash를 적용하고 싶다면 해당 Stash의 인덱스를 지정하여 적용할 수 있습니다:
git stash apply stash@{2}
또한, Stash가 더 이상 필요하지 않다면 다음 명령어로 삭제할 수 있습니다:
git stash drop stash@{2}
모든 Stash를 한 번에 삭제하려면 다음 명령어를 사용합니다:
git stash clear
Stash를 활용한 브랜치 전환 예제
예를 들어, 작업 도중 급하게 버그를 수정해야 하는 상황이 발생했다고 가정해봅시다. 하지만 현재 작업이 완료되지 않은 상태라면, 다음과 같은 순서로 작업을 진행할 수 있습니다:
- 현재 작업 내용을 Stash에 저장:
git stash
- 버그 수정 브랜치로 전환:
git checkout hotfix
- 버그 수정 작업 완료 후 다시 원래 브랜치로 전환:
git checkout feature
- 저장해두었던 작업 내용 적용:
git stash apply
이렇게 하면 작업 도중에도 중단 없이 필요한 수정 작업을 빠르게 수행할 수 있습니다.
결론
Git의 고급 사용법인 Rebase와 Merge, Interactive Rebase, 그리고 Stash를 활용하면 더 효율적이고 깔끔하게 Git을 사용할 수 있습니다. 각 명령어의 특성을 이해하고 적절히 사용하는 것이 협업과 개인 작업 모두에서 중요한 역할을 합니다. Rebase와 Merge를 통해 브랜치 히스토리를 관리하고, Interactive Rebase로 커밋을 정리하며, Stash를 통해 작업을 유연하게 관리해 보세요.
이러한 Git 고급 기능들을 익히고 활용하면 팀 프로젝트에서 더 원활하게 협업하고, 본인의 작업 흐름도 더욱 깔끔하게 유지할 수 있을 것입니다.
'git' 카테고리의 다른 글
Git 설정 및 최적화 - 개발 환경을 효율적으로 만들기 (0) | 2024.12.15 |
---|---|
Git 팀 작업을 자동화하는 방법 [ Hooks와 커스텀 스크립트 ] (0) | 2024.12.14 |
GitHub 및 GitLab 활용 가이드 (0) | 2024.12.12 |
Git 태그 사용하기 - 릴리즈 버전 관리의 핵심 도구 (0) | 2024.12.11 |
Git 협업 - Fork, Pull Request, 브랜치 전략, 코드 리뷰 방법 (0) | 2024.12.10 |