1. 브랜치 (Branch)
브랜치는 프로젝트 내에서 독립적인 작업 공간을 만들어주는 도구예요. 하나의 프로젝트에서 여러 명이 작업할 때나 실험적인 코드를 추가해보고 싶을 때, 기존 코드에 영향을 주지 않고 새로운 작업을 할 수 있도록 도와줍니다. 예를 들어, main 브랜치에서는 안정된 버전의 코드만 유지하고, 새로운 기능을 추가하기 위해 feature라는 새 브랜치를 만들어 코드를 작성해볼 수 있습니다.
2. 오리진 (Origin)
origin은 기본적으로 원격 저장소의 별명을 의미해요. "원격 저장소"란 인터넷이나 네트워크 상에 위치한 Git 저장소인데, 내 컴퓨터에 있는 로컬 저장소와 구분됩니다. origin은 일반적으로 중앙 서버나 다른 사람들이 함께 작업하는 저장소를 의미해요.
예를 들어, GitHub에 프로젝트를 만들어서 다른 사람들과 협업을 한다고 하면, GitHub에 있는 이 저장소가 바로 "원격 저장소"입니다. Git에서 처음 프로젝트를 클론(clone, 복사) 해오면, 이 원격 저장소의 별명이 origin으로 자동으로 지정됩니다.
정리하자면:
- 로컬 저장소: 내 컴퓨터에 있는 Git 저장소
- 원격 저장소: 네트워크에 있는 Git 저장소 (보통 origin이라는 별명으로 부름)
3. 헤드 (HEAD)
HEAD는 현재 작업 중인 브랜치를 가리키는 포인터입니다. 쉽게 말해, 내가 현재 어떤 브랜치에서 작업하고 있는지 Git이 기억하도록 해주는 역할을 합니다.
예를 들어, main 브랜치에서 작업을 하고 있다면, HEAD는 main 브랜치를 가리킵니다. 그런데 만약 feature라는 새로운 브랜치로 전환하면, HEAD가 feature 브랜치를 가리키게 됩니다.
또한 HEAD는 현재 작업 중인 커밋(코드의 특정 지점)도 가리킬 수 있는데, 이를 통해 Git이 "현재 이 사람이 어떤 지점에서 작업 중인지" 알 수 있게 돼요.
정리하자면:
- HEAD: 현재 작업 중인 브랜치나 커밋을 가리키는 포인터
4. 마스터 (Master) / 메인 (Main)
master는 Git의 기본 브랜치 이름이었는데, 최근에는 main이 새로운 기본 이름으로 사용되고 있어요. 프로젝트를 처음 시작하면 main 또는 master라는 브랜치가 자동으로 생성되며, 보통 이 브랜치에는 안정된 버전의 코드가 들어갑니다.
새로운 기능을 추가하고 싶다면 main 브랜치에서 직접 작업하기보다는 새로운 브랜치를 만들어 작업하고, 코드가 안정적이고 문제가 없다고 확인되면 이 브랜치의 코드를 main으로 병합(merge)하는 방식으로 진행합니다.
5. 체크아웃 (Checkout)
checkout은 특정 브랜치나 커밋으로 이동하는 명령어입니다. 예를 들어 main 브랜치에서 작업을 하고 있다가 feature 브랜치로 이동하고 싶다면, git checkout feature라는 명령을 사용해 feature 브랜치로 이동할 수 있습니다. 이렇게 하면 HEAD도 자동으로 feature 브랜치를 가리키게 돼요.
6. 병합 (Merge)
merge는 두 개의 브랜치를 하나로 합치는 것을 말해요. 예를 들어, feature 브랜치에서 작업을 끝낸 후 main 브랜치에 이 내용을 반영하고 싶다면, main 브랜치에서 feature 브랜치를 merge하면 됩니다. 이 과정을 통해 여러 브랜치에서 진행된 작업을 하나의 브랜치로 통합할 수 있어요.
요약
- Branch: 독립된 작업 공간. 여러 작업을 분리해서 진행할 수 있음.
- Origin: 원격 저장소의 별명.
- HEAD: 현재 작업 중인 브랜치나 커밋을 가리키는 포인터.
- Master/Main: Git에서 기본으로 생성되는 브랜치 이름.
- Checkout: 특정 브랜치나 커밋으로 이동하는 명령어.
- Merge: 두 브랜치를 하나로 합치는 작업.
이렇게 각 용어들을 알면, Git을 사용할 때 기본 개념을 이해하는 데 큰 도움이 될 거예요!
브랜치에서 main에 적용하는 과정 (Git Flow)
Git Flow는 많은 개발자들이 사용하는 브랜치 전략 중 하나로, 개발을 기능 추가와 버그 수정 등의 작업 브랜치에서 수행하고 병합(Merge) 과정을 통해 main 브랜치로 반영하는 방식입니다. 여기에서는 간단한 기능 추가 브랜치 생성부터 최종 병합까지의 과정을 설명할게요.
단계 1. 브랜치 생성 및 작업 시작
먼저 main 브랜치에서 새로운 기능을 추가하기 위해 브랜치를 만듭니다.
git checkout main # main 브랜치로 이동
git pull origin main # 최신 상태로 업데이트
git checkout -b feature/login-page # feature/login-page 브랜치 생성 및 이동
단계 2. 브랜치에서 코드 작업 및 커밋
feature/login-page 브랜치에서 필요한 기능을 개발하고, 변경 사항을 커밋합니다.
git add . # 변경된 파일 스테이징
git commit -m "Add login page" # 작업 내용 커밋
작업 중에도 자주 커밋을 생성하는 것이 좋습니다. 예를 들어, 한 기능을 완성할 때마다 중간 커밋을 만드는 것이 좋은 습관입니다.
git commit -m "Implement login form validation"
git commit -m "Connect login page to backend API"
단계 3. 원격 저장소에 브랜치 푸시
협업 중이라면 작업한 내용을 원격 저장소에 푸시하여 다른 팀원들이 볼 수 있도록 해야 합니다.
git push origin feature/login-page # 작업 브랜치를 원격 저장소에 푸시
단계 4. Pull Request (PR) 생성 및 코드 리뷰
브랜치를 원격 저장소에 푸시한 후, GitHub 또는 GitLab 같은 플랫폼에서 Pull Request (PR)를 생성합니다. PR은 "내 코드 변경을 main에 반영하겠다"라는 요청으로, 보통 팀원들이 코드 리뷰를 진행하고 승인합니다.
- Pull Request 생성: feature/login-page → main으로 병합 요청(PR)
- 코드 리뷰: 팀원들이 PR에서 코드 변경 사항을 검토하고 피드백을 남깁니다.
- 수정 후 커밋: 필요할 경우 피드백을 반영해 코드를 수정하고 다시 커밋합니다.
git add . # 수정된 파일 스테이징
git commit -m "Fix login validation issue based on review"
git push origin feature/login-page # 수정 사항 푸시
단계 5. main 브랜치에 병합 (Merge)
리뷰가 완료되고 PR이 승인되면, 보통 팀에서 결정한 방식으로 main 브랜치에 병합합니다.
- Squash and Merge: 여러 커밋을 하나로 합쳐서 병합. 커밋이 하나로 깔끔해짐.
- Rebase and Merge: 기능 브랜치의 커밋을 main 브랜치 위에 다시 정렬.
- Merge Commit: 별도의 병합 커밋을 추가해 병합 (보통 Merge branch 'feature/login-page'라는 메시지)
단계 6. 로컬 및 원격 브랜치 정리
병합이 끝나면 기능 브랜치를 삭제하여 정리합니다.
git checkout main # main 브랜치로 이동
git pull origin main # 최신 상태로 업데이트
git branch -d feature/login-page # 로컬에서 기능 브랜치 삭제
git push origin --delete feature/login-page # 원격에서도 기능 브랜치 삭제
# main 브랜치로 이동 및 업데이트
git checkout main
git pull origin main
# 새 기능 브랜치 생성
git checkout -b feature/기능명
# 코드 작업, 커밋
git add .
git commit -m "작업 내용"
# 원격 저장소에 푸시
git push origin feature/기능명
# (GitHub에서 Pull Request 생성, 코드 리뷰 후 수정사항 반영)
git add .
git commit -m "리뷰 반영 사항"
git push origin feature/기능명
# main 브랜치로 병합 후 브랜치 삭제
git checkout main
git pull origin main
git branch -d feature/기능명
git push origin --delete feature/기능명