wiki:it:github:branch_management
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
wiki:it:github:branch_management [2025/07/30 06:43] – 만듦 - 바깥 편집 127.0.0.1 | wiki:it:github:branch_management [2025/07/31 02:42] (현재) – syjang0803 | ||
---|---|---|---|
줄 7: | 줄 7: | ||
==== 브랜치를 나무로 비유하면 ==== | ==== 브랜치를 나무로 비유하면 ==== | ||
- | **메인 브랜치 (main)** = 나무의 **줄기** | + | **메인 브랜치 ('' |
- | - 가장 안정적이고 중요한 코드 | + | |
- | - 항상 동작하는 완성된 코드만 있어야 함 | + | |
- | - 사용자들이 실제로 사용하는 코드 | + | |
- | **기능 브랜치 (feature)** = 나무의 **가지** | + | **기능 브랜치 ('' |
- | - 새로운 기능을 개발하는 곳 | + | |
- | - 실험적인 코드, 아직 완성되지 않은 코드 | + | |
- | - 문제가 생겨도 메인 브랜치에 영향 없음 | + | |
==== 실생활 예시로 이해하기 ==== | ==== 실생활 예시로 이해하기 ==== | ||
줄 21: | 줄 21: | ||
**웹사이트를 만든다고 가정해봅시다: | **웹사이트를 만든다고 가정해봅시다: | ||
- | <code> | + | <file> |
main 브랜치 (메인 웹사이트) | main 브랜치 (메인 웹사이트) | ||
├── login-feature 브랜치 (로그인 기능 개발 중) | ├── login-feature 브랜치 (로그인 기능 개발 중) | ||
├── payment-feature 브랜치 (결제 기능 개발 중) | ├── payment-feature 브랜치 (결제 기능 개발 중) | ||
└── design-update 브랜치 (디자인 업데이트 중) | └── design-update 브랜치 (디자인 업데이트 중) | ||
- | </code> | + | </file> |
**이렇게 하면 좋은 점:** | **이렇게 하면 좋은 점:** | ||
- | - 로그인 기능 개발 중 문제가 생겨도 메인 웹사이트는 정상 작동 | + | * 로그인 기능 개발 중 문제가 생겨도 메인 웹사이트는 정상 작동 |
- | - 여러 사람이 동시에 다른 기능을 개발 가능 | + | |
- | - 완성된 기능만 메인 브랜치에 합치기 가능 | + | |
===== 🚀 브랜치 기본 사용법 ===== | ===== 🚀 브랜치 기본 사용법 ===== | ||
줄 54: | 줄 54: | ||
**💡 브랜치 이름 앞의 기호 의미:** | **💡 브랜치 이름 앞의 기호 의미:** | ||
- | - `*` : 현재 작업 중인 브랜치 | + | |
- | - `main` : 메인 브랜치 (가장 중요한 브랜치) | + | * '' |
==== 새 브랜치 만들기 ==== | ==== 새 브랜치 만들기 ==== | ||
줄 74: | 줄 74: | ||
**💡 브랜치 이름 짓기 규칙:** | **💡 브랜치 이름 짓기 규칙:** | ||
- | - `feature-기능명`: 새로운 기능 개발 | + | * '' |
- | - `bugfix-문제명`: 버그 수정 | + | * '' |
- | - `hotfix-문제명`: 긴급 수정 | + | * '' |
- | - 예: `feature-user-login`, `bugfix-payment-error` | + | |
==== 브랜치 이동하기 ==== | ==== 브랜치 이동하기 ==== | ||
줄 92: | 줄 92: | ||
# 이동 후 확인 | # 이동 후 확인 | ||
git branch | git branch | ||
- | pwd # 현재 위치는 같지만 Git 상태가 다름 | + | '' |
</ | </ | ||
**⚠️ 브랜치 이동 시 주의사항: | **⚠️ 브랜치 이동 시 주의사항: | ||
- | - 변경사항이 있으면 먼저 커밋하거나 stash 해야 함 | + | * 변경사항이 있으면 먼저 커밋하거나 stash 해야 함 |
- | - 브랜치마다 파일 상태가 다를 수 있음 | + | |
===== 🔄 브랜치 작업 흐름 - 실제 개발 시나리오 ===== | ===== 🔄 브랜치 작업 흐름 - 실제 개발 시나리오 ===== | ||
줄 222: | 줄 222: | ||
**Merge의 장점:** | **Merge의 장점:** | ||
- | - 🟢 안전함: 원본 커밋 히스토리가 보존됨 | + | * 🟢 안전함: 원본 커밋 히스토리가 보존됨 |
- | - 🟢 쉬움: 이해하기 쉽고 실수할 확률이 낮음 | + | |
- | - 🟢 추적 가능: 언제 어떤 기능이 합쳐졌는지 명확함 | + | |
**Merge의 단점:** | **Merge의 단점:** | ||
- | - 🔴 복잡함: 히스토리가 복잡해 보일 수 있음 | + | * 🔴 복잡함: 히스토리가 복잡해 보일 수 있음 |
- | - 🔴 병합 커밋: 추가 커밋이 생성됨 | + | |
==== Rebase (재배치) - 고급 사용자용 ==== | ==== Rebase (재배치) - 고급 사용자용 ==== | ||
줄 247: | 줄 247: | ||
**⚠️ Rebase 주의사항: | **⚠️ Rebase 주의사항: | ||
- | - 이미 GitHub에 올린 브랜치는 rebase 하지 마세요 | + | * 이미 GitHub에 올린 브랜치는 rebase 하지 마세요 |
- | - 충돌이 발생하면 해결하기 더 복잡합니다 | + | |
- | - 처음에는 merge를 사용하는 것을 추천합니다 | + | |
===== 🚨 브랜치 충돌 해결하기 ===== | ===== 🚨 브랜치 충돌 해결하기 ===== | ||
줄 258: | 줄 258: | ||
**예시 상황:** | **예시 상황:** | ||
- | 1. `main` 브랜치에서 | + | * '' |
- | 2. `feature-login` 브랜치에서 같은 | + | * '' |
- | 3. 두 브랜치를 합치려고 할 때 충돌 발생 | + | |
==== 충돌 해결 과정 ==== | ==== 충돌 해결 과정 ==== | ||
줄 288: | 줄 288: | ||
< | < | ||
< | < | ||
- | <<<<<<< | + | %%<<<<<<< |
< | < | ||
- | ======= | + | %%=======%% |
< | < | ||
- | >>>>>>> | + | %%>>>>>>> |
</ | </ | ||
< | < | ||
줄 301: | 줄 301: | ||
**💡 충돌 마커 의미:** | **💡 충돌 마커 의미:** | ||
- | - `<<<<<<< | + | * %%<<<<<<< |
- | - `=======`: 두 브랜치 내용의 구분선 | + | * %%=======%%: 두 브랜치 내용의 구분선 |
- | - `>>>>>>> | + | * %%>>>>>>> |
**4단계: 충돌 해결하기** | **4단계: 충돌 해결하기** | ||
줄 330: | 줄 330: | ||
==== Git Flow (대표적인 브랜치 전략) ==== | ==== Git Flow (대표적인 브랜치 전략) ==== | ||
- | <code> | + | <file> |
main (메인 브랜치) | main (메인 브랜치) | ||
├── develop (개발 브랜치) | ├── develop (개발 브랜치) | ||
줄 338: | 줄 338: | ||
├── release/ | ├── release/ | ||
└── hotfix/ | └── hotfix/ | ||
- | </code> | + | </file> |
**브랜치별 역할:** | **브랜치별 역할:** | ||
- | - **main**: 출시된 안정적인 코드 | + | |
- | - **develop**: | + | * **'' |
- | - **feature**: | + | * **'' |
- | - **release**: | + | * **'' |
- | - **hotfix**: 긴급 버그 수정 | + | |
==== 간단한 브랜치 전략 (초보자 추천) ==== | ==== 간단한 브랜치 전략 (초보자 추천) ==== | ||
- | <code> | + | <file> |
main (메인 브랜치) | main (메인 브랜치) | ||
├── feature/ | ├── feature/ | ||
├── bugfix/ | ├── bugfix/ | ||
└── hotfix/ | └── hotfix/ | ||
- | </code> | + | </file> |
**작업 흐름:** | **작업 흐름:** | ||
- | 1. `main`에서 새 브랜치 생성 | + | * 1. '' |
- | 2. 기능 개발 완료 | + | |
- | 3. `main`으로 병합 | + | |
- | 4. 브랜치 삭제 | + | |
===== 🔧 고급 브랜치 명령어 ===== | ===== 🔧 고급 브랜치 명령어 ===== | ||
줄 415: | 줄 415: | ||
**추천하는 이름 규칙:** | **추천하는 이름 규칙:** | ||
- | <code bash> | + | <file> |
# 기능 개발 | # 기능 개발 | ||
feature/ | feature/ | ||
줄 434: | 줄 434: | ||
experiment/ | experiment/ | ||
experiment/ | experiment/ | ||
- | </code> | + | </file> |
**피해야 할 이름:** | **피해야 할 이름:** | ||
- | <code bash> | + | <file> |
# 너무 모호함 | # 너무 모호함 | ||
feature/ | feature/ | ||
줄 445: | 줄 445: | ||
# 너무 김 | # 너무 김 | ||
feature/ | feature/ | ||
- | </code> | + | </file> |
==== 브랜치 작업 시 좋은 습관 ==== | ==== 브랜치 작업 시 좋은 습관 ==== | ||
줄 490: | 줄 490: | ||
**오류 메시지: | **오류 메시지: | ||
- | <code> | + | <file> |
error: Your local changes to the following files would be overwritten by checkout: | error: Your local changes to the following files would be overwritten by checkout: | ||
- | file.txt | + | '' |
Please commit your changes or stash them before you switch branches. | Please commit your changes or stash them before you switch branches. | ||
- | </code> | + | </file> |
**해결법: | **해결법: | ||
<code bash> | <code bash> | ||
# 방법 1: 커밋하기 | # 방법 1: 커밋하기 | ||
- | git add . | + | '' |
git commit -m " | git commit -m " | ||
# 방법 2: 임시 저장 (stash) | # 방법 2: 임시 저장 (stash) | ||
- | git stash | + | '' |
git switch other-branch | git switch other-branch | ||
git switch back-to-original-branch | git switch back-to-original-branch | ||
- | git stash pop | + | '' |
</ | </ | ||
줄 512: | 줄 512: | ||
**오류 메시지: | **오류 메시지: | ||
- | <code> | + | <file> |
- | error: The branch ' | + | error: The branch |
- | If you are sure you want to delete it, run 'git branch -D feature-login' | + | If you are sure you want to delete it, run '' |
- | </code> | + | </file> |
**해결법: | **해결법: | ||
<code bash> | <code bash> | ||
# 브랜치를 정말 삭제하고 싶다면 | # 브랜치를 정말 삭제하고 싶다면 | ||
- | git branch -D feature-login | + | '' |
# 또는 먼저 병합 후 삭제 | # 또는 먼저 병합 후 삭제 | ||
줄 552: | 줄 552: | ||
==== 연습 1: 기본 브랜치 작업 ==== | ==== 연습 1: 기본 브랜치 작업 ==== | ||
- | 1. 새 브랜치 | + | - 1. 새 브랜치 |
- | 2. `hello.html` 파일 만들기 | + | |
- | 3. 커밋하고 메인 브랜치로 병합하기 | + | |
- | 4. 브랜치 삭제하기 | + | |
==== 연습 2: 여러 브랜치 동시 작업 ==== | ==== 연습 2: 여러 브랜치 동시 작업 ==== | ||
- | 1. `feature/ | + | - 1. '' |
- | 2. `feature/ | + | |
- | 3. 각각 메인 브랜치로 병합하기 | + | |
==== 연습 3: 충돌 해결 연습 ==== | ==== 연습 3: 충돌 해결 연습 ==== | ||
- | 1. 메인 브랜치에서 | + | - 1. 메인 브랜치에서 |
- | 2. 새 브랜치에서 같은 파일의 같은 부분 다르게 수정 | + | |
- | 3. 병합 시 발생하는 충돌 해결하기 | + | |
===== 🔗 관련 용어 ===== | ===== 🔗 관련 용어 ===== | ||
**더 자세한 설명이 필요하시면: | **더 자세한 설명이 필요하시면: | ||
- | - [[wiki: | + | * [[wiki: |
- | - [[wiki: | + | |
- | - [[wiki: | + | |
===== 🚀 다음 단계 ===== | ===== 🚀 다음 단계 ===== | ||
**브랜치 관리를 익혔다면: | **브랜치 관리를 익혔다면: | ||
- | 1. **[[wiki: | + | - 1. **[[wiki: |
- | 2. **[[wiki: | + | |
- | 3. **Pull Request 배우기** - 팀원과 협업하는 방법 | + | |
===== 🎓 마무리 ===== | ===== 🎓 마무리 ===== | ||
줄 586: | 줄 586: | ||
**여러분이 배운 것들:** | **여러분이 배운 것들:** | ||
- | - ✅ 브랜치 개념 이해 | + | * ✅ 브랜치 개념 이해 |
- | - ✅ 브랜치 생성, 이동, 삭제 | + | |
- | - ✅ 브랜치 병합 (Merge) | + | |
- | - ✅ 충돌 해결 방법 | + | |
- | - ✅ 브랜치 전략과 모범 사례 | + | |
**브랜치를 사용하면: | **브랜치를 사용하면: | ||
- | - 🚀 여러 기능을 동시에 안전하게 개발 | + | * 🚀 여러 기능을 동시에 안전하게 개발 |
- | - 🛡️ 메인 코드를 보호하면서 실험 가능 | + | |
- | - 👥 팀원들과 효율적으로 협업 | + | |
- | - 📈 더 체계적인 개발 프로세스 | + | |
**다음 단계로 넘어가기 전에:** | **다음 단계로 넘어가기 전에:** | ||
- | - 실제 프로젝트에서 브랜치를 사용해보세요 | + | * 실제 프로젝트에서 브랜치를 사용해보세요 |
- | - 작은 기능부터 시작해서 점차 복잡한 작업으로 확장해보세요 | + | |
- | - 충돌 해결 연습을 많이 해보세요 | + | |
**이제 문제 해결 가이드를 통해 막혔을 때 해결하는 방법을 배워보세요!** 🌟 | **이제 문제 해결 가이드를 통해 막혔을 때 해결하는 방법을 배워보세요!** 🌟 | ||
줄 607: | 줄 607: | ||
---- | ---- | ||
- | **이전:** [[wiki: | + | **이전:** [[wiki: |
- | + |
wiki/it/github/branch_management.1753857794.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1