Git 브랜치 완벽 정복 - 작업 내용 안전하게 보존하고 병합하는 방법
연결 문서
- Pro Git 책 (한글 번역판)
- Git 공식 문서
Git 브랜치 완벽 정복 - 작업 내용 안전하게 보존하고 병합하는 방법
Git은 소스 코드의 변경 이력을 관리하고 협업을 원활하게 해주는 분산 버전 관리 시스템입니다. 그중에서도 브랜치(branch) 기능은 새로운 기능 개발이나 버그 수정 등 다양한 작업을 독립적으로 진행할 수 있게 해주는 중요한 도구입니다.
하지만 브랜치를 사용하다 보면 브랜치 간 이동 시 작업 내용이 사라지거나 충돌이 발생하는 등 어려움을 겪을 수 있습니다. 이 글에서는 Git 브랜치를 이용하여 작업을 분리하고, 작업 내용을 안전하게 보존하며, 추후에 병합하는 방법에 대해 초보자도 쉽게 따라할 수 있도록 자세히 설명하겠습니다.
🚩 문제 상황
-
main
브랜치에서develop
브랜치를 만들어 작업을 진행했습니다. - 작업 후
main
으로 돌아가pull
을 받았습니다. - 다시
develop
으로 돌아갔더니 변경사항이 사라졌습니다! - 브랜치 간 이동 시 작업 내용을 어떻게 안전하게 보존할 수 있을까요?
🛠️ 해결 방법 단계별 가이드
1단계: 브랜치 기본 이해하기
-
git branch [브랜치명]
: 새 브랜치 생성 -
git checkout [브랜치명]
: 브랜치 전환 -
git checkout -b [브랜치명]
: 브랜치 생성과 전환 동시에 수행
예시:
git branch feature-login
git checkout feature-login
# 또는
git checkout -b feature-login
2단계: 변경사항 안전하게 저장하기
브랜치 전환 전 항상 작업 내용을 저장해야 합니다.
-
커밋하기 애매한 경우:
git stash
를 사용해 변경사항을 임시로 저장합니다.git stash
-
커밋 가능한 경우: 변경사항을 커밋합니다.
git add . git commit -m "작업 내용 설명"
3단계: git stash
활용하기
-
git stash
: 현재 변경사항을 스택에 임시 저장 -
git stash list
: 저장된 stash 목록 확인 -
git stash apply
: 가장 최근의 stash를 적용 -
git stash pop
: stash를 적용하고 목록에서 제거
예시:
# 변경사항 임시 저장
git stash
# 다른 브랜치로 전환
git checkout main
# 필요한 작업 수행 후 원래 브랜치로 돌아오기
git checkout develop
# 임시 저장한 변경사항 적용
git stash apply
4단계: 브랜치 간 안전하게 이동하기
-
작업 중인 내용 임시 저장
git stash
-
다른 브랜치로 전환
git checkout main
-
필요한 작업 수행 후 원래 브랜치로 돌아오기
git checkout develop
-
임시 저장한 작업 내용 적용
git stash apply
5단계: 변경사항 확인 및 충돌 해결
-
git status
로 현재 상태를 확인 - 충돌이 발생했다면 파일을 수동으로 수정하고
git add
와git commit
으로 변경사항을 저장
Git 브랜치란?
브랜치는 Git에서 작업 흐름을 분리하기 위한 도구로, 메인 코드라인과는 별개로 독립적인 작업 공간을 제공합니다. 이를 통해 개발자는 메인 코드에 영향을 주지 않고 새로운 기능을 개발하거나 버그를 수정할 수 있습니다.
- 메인 브랜치: 보통
main
또는master
로 불리며, 안정적인 코드를 유지합니다. - 기능 브랜치: 새로운 기능이나 수정 작업을 위한 브랜치로, 작업이 완료되면 메인 브랜치에 병합됩니다.
브랜치를 사용하는 이유
- 안정성 유지: 메인 브랜치는 항상 배포 가능한 상태로 유지됩니다.
- 동시 작업 가능: 여러 개발자가 각자의 브랜치에서 동시에 작업할 수 있습니다.
- 작업 분리: 기능별로 브랜치를 생성하여 작업을 분리함으로써 코드 관리가 용이합니다.
- 리스크 최소화: 새로운 기능이나 실험적인 코드를 메인 브랜치에 바로 적용하지 않아 리스크를 줄입니다.
브랜치 생성과 전환 방법
브랜치 생성
새로운 브랜치를 생성하려면 다음 명령어를 사용합니다:
git branch 브랜치이름
예시:
git branch feature-login
브랜치 목록 확인
현재 저장소의 모든 브랜치를 확인하려면:
git branch
현재 체크아웃된 브랜치 앞에는 *
표시가 있습니다.
브랜치 전환
다른 브랜치로 이동하려면 git checkout
명령어를 사용합니다:
git checkout 브랜치이름
예시:
git checkout feature-login
브랜치 생성과 전환을 한 번에 하려면 -b
옵션을 사용합니다:
git checkout -b 브랜치이름
예시:
git checkout -b feature-signup
브랜치 병합 방법
작업이 완료되면 기능 브랜치를 메인 브랜치에 병합하여 변경 사항을 반영합니다.
Fast-forward 병합
메인 브랜치에 변경 사항이 없고 기능 브랜치에만 변경 사항이 있는 경우:
git checkout main
git merge feature-login
이 경우 Git은 메인 브랜치의 포인터를 기능 브랜치의 최신 커밋으로 이동시킵니다.
3-way 병합
메인 브랜치와 기능 브랜치 모두에 변경 사항이 있는 경우:
git checkout main
git merge feature-login
Git은 공통 조상을 찾아 세 개의 버전을 비교하여 병합합니다.
병합 충돌과 해결 방법
병합 충돌 발생 상황
두 브랜치에서 동일한 파일의 동일한 부분을 수정한 경우 병합 충돌이 발생합니다.
충돌 해결 방법
-
충돌 파일 확인: Git은 충돌이 발생한 파일을 알려줍니다.
git status
-
파일 수정: 충돌 표시를 찾아 수동으로 수정합니다.
<<<<<<< HEAD 메인 브랜치의 코드 ======= 기능 브랜치의 코드 >>>>>>> feature-login
-
수정 사항 추가:
git add 충돌파일
-
커밋 완료:
git commit
🎯 실습해보세요!
작업 중인 브랜치를 변경해야 할 때
# 현재 develop 브랜치에서 작업 중
git stash
git checkout main
# main에서 필요한 작업 수행
git checkout develop
git stash apply
특정 파일만 stash
에 저장하고 싶을 때
git stash push file1.py file2.js
stash
를 새 브랜치로 체크아웃하고 적용하기
git stash branch 새로운_브랜치명
결론
이렇게 하면 브랜치 간 이동하면서도 작업 내용을 안전하게 관리할 수 있습니다. Git 브랜치를 활용하면 개발자는 작업을 효율적으로 분리하고 메인 코드를 안정적으로 유지할 수 있으며, 병합 과정을 통해 최종 결과물을 하나로 통합할 수 있습니다. 이제 실수로 작업을 잃어버릴 걱정 없이 Git 브랜치를 자유롭게 활용해보세요!
Enjoy Reading This Article?
Here are some more articles you might like to read next: