Git Flow는 명확한버전 관리가 필요한 프로젝트(예: 오픈소스 라이브러리, 앱 개발)에 적합한 전략입니다.
브랜치 구성
Master(Main): 출시 가능한 코드 저장소
Develop: 개발 작업이 통합되는 브랜치
Feature: 각 기능별 작업 브랜치
Release: 출시 준비를 위한 브랜치
Hotfix: 긴급 버그 수정을 위한 브랜치
Git Flow의 특징
다양한 브랜치로 복잡한 프로젝트를 구조화
다중 버전 지원에 적합
2) GitHub Flow
GitHub Flow는 깃허브를 기반으로 한간단하고 유연한 워크플로우로, 신속한 배포에 적합합니다.
브랜치 구성
Main: 기본 배포 브랜치
Feature: 각 기능 개발을 위한 브랜치
GitHub Flow의 특징
지속적 통합과 배포(CI/CD)에 최적화
풀 리퀘스트(PR)를 통해 코드 검토 및 병합
브랜치 규칙 (Branch Rule)
Main 브랜치에는 직접 커밋 금지
작업 브랜치가 꼬일 위험 방지
기능 작업 전에 Main 브랜치 기준으로 새로운 브랜치 생성
브랜치 이름은 feature/기능명 형식으로 작성
작업이 완료되면 다음 단계를 따릅니다:
원격 저장소(origin)의 Main 상태를 가져오기 (git fetch)
Main 브랜치를 Feature 브랜치에 병합 (git merge)
Feature 브랜치를 푸시 (git push)
**Pull Request(PR)**를 통해 병합 요청
2. 병합(merge)
Merge (병합)
Merge : 두 개 이상의 브랜치를 하나로 합치는 작업 각각의 브랜치에서 개발 완료 → main 브랜치로 병합하는 과정
두 버전의 합집합을 구하는 것으로 아래와 같은 세 가지 상황이 일어날 수 있다.
1) 빨리 감기 (Fast-forward)
하나의 커밋에만 변화가 있어 새로운 상태를 만들어줄 필요 없이 기존 커밋과 동일하게 변화가 있는 커밋으로 상태를 바꾸어주는 상황
main 브랜치가 기능 브랜치 중 한가지로 병합(이동)
2) 병합 커밋 (Merge Commit)
양쪽 브랜치에 모두 변화가 있는 경우 새로운 병합 커밋이 생성됩니다.
협업 시 작업 내역을 명확하게 기록하기 위해 주로 사용됩니다.
3) 충돌 (Conflict)
같은 파일에 대해 두 커밋 모두 변화가 있어 어느 쪽으로 합쳐야 할지 충돌이 일어나는 상황.
충돌이 난 부분을 확인하고 무엇을 남길지 수동으로 선택해서 해결해야함.
3. 기본 명령어
브랜치 & 병합 명령어
1) git branch
# 현재 모든 로컬 브랜치 확인
git branch
# 원격 브랜치 포함 모든 브랜치 확인
git branch -a
# 원격 브랜치만 확인
git branch -r
# 브랜치와 마지막 커밋 확인
git branch -v
# 브랜치 삭제
# 병합이 완료된 브랜치를 삭제합니다.
git branch -d <브랜치명>
2) git checkout
# 브랜치 생성 및 전환
# 새로운 브랜치를 생성하고 해당 브랜치로 전환합니다.
git checkout -b <새로운 브랜치 명>
# 브랜치 명이 기존에 있는 경우 전환, 기존에 없는 브랜치 명인 경우 새 브랜치 생성
# 새로운 브랜치 생성
git checkout <새 브랜치 명>
# 브랜치 전환
git checkout <전환할 브랜치 명>
# 특정 커밋 상태로 되돌리기
git checkout <커밋아이디>
# 최신 커밋 상태로 변경
git checkout -
git checkout -- <파일명>
3) git merge
# 브랜치 병합
# 다른 브랜치의 작업 내용을 현재 브랜치에 병합합니다.
git merge <브랜치명>
# Fast-forward 병합 강제 방지 (새로운 병합 커밋 생성)
git merge --no-ff <브랜치명>
4. 브랜치 실습 (생성/전환/병합)
1) 브랜치 생성 및 전환
새로운 브랜치 생성
# 현재 브랜치 확인
git branch
# 새로운 브랜치 생성 및 전환
git checkout -b feature/add-task
2) 파일 생성 및 작업
새로운 파일 생성 & 작업
# 새 파일 생성 및 내용 입력
echo "console.log('Add Task Functionality');" > app.js
# 변경사항 Staging Area로 추가하고 커밋
git add app.js
git commit -m "feat: 할 일 추가 기능 구현"
3) 브랜치 전환
브랜치를 전환합니다
# main 브랜치로 전환
git checkout main
Windows 탐색기에서 상태 확인:
방금 생성한 app.js 파일이 메인 브랜치에는 존재하지 않는 상태로 변경됩니다.
Git은 브랜치에 따라 파일 상태를 자동으로 관리
feature/app-task
main
SourceTree를 활용한 브랜치 전환
SourceTree에서브랜치 목록을 클릭하여 브랜치를 전환할 수 있습니다.
브랜치 전환 시 현재 작업 디렉토리에 따라 파일 상태가 변경됨을 시각적으로 확인할 수 있습니다.
4) 브랜치 병합
브랜치 병합
# 브랜치 병합 (현 브랜치와 작성한 브랜치 병합)
git merge feature/add-task