Git 기초, Git Flow 사용법과 설치, 명령어
Git의 기본 개념
Git은 쉽게 말해 파일을 관리해주는 프로그램이다.
Git은 코드의 각 변경 사항을 기록해 버전을 관리하고, 작업을 브랜치(branch)로 나누어 진행할 수 있다.
코드의 변경을 쉽게 되돌리거나, 여러 사람이 동시에 작업하면서도 충돌을 최소화하도록 도와준다.
- 분산 버전 관리 시스템: Git은 중앙 서버 없이도 각 개발자가 로컬 저장소를 통해 코드의 전체 기록을 갖고 작업할 수 있다.
- 커밋(commit): 코드의 변경 사항을 기록하는 단위로, 각 커밋마다 고유한 식별자가 부여된다.
- 브랜치(branch): 독립적인 작업을 위한 별도의 공간으로, 메인 코드와 분리되어 작업하다가 나중에 병합할 수 있다.
Github
Github는 Git이 설치되어져 있는 클라우드 저장소이다.
로컬에서 Git이 관리하는 파일을 Github의 원격 저장소에 업로드하면,
업로드된 파일들에 대해 Git의 핵심 기능인 버전 관리 기능을 사용할 수 있으며,
온라인 저장소이므로 백업 및 다른 협업자들과 공유가 가능하다.
Git은 로컬에서 버전을 관리해주는 프로그램이며, Github은 Git을 클라우드 방식으로 구현한 서비스이다.
Git 기본 흐름
Git의 기본적인 작업 흐름은 작업 폴더 초기화, 파일 추가 및 커밋, 브랜치 관리,
그리고 원격 저장소에 Push 등의 단계로 이루어진다.
Git 초기화: 프로젝트 폴더를 Git 저장소로 초기화한다.
git init
파일 상태 확인: git status 명령으로 현재 파일의 상태(수정, 추적, 비추적 상태)를 확인한다.
git status
파일 추가: 작업한 파일을 Staging Area에 추가한다.
git add <파일명>
커밋: Staging Area에 있는 파일을 커밋하여 버전으로 저장다.
git commit -m "커밋 메시지"
Git의 주요 명령어
- git init: 현재 디렉토리를 Git 저장소로 초기화하여, Git이 파일 생성 및 코드 작성을 추적하기 시작한다.
- git add <파일명> 또는 git add .: 특정 파일을 Staging Area에 추가하거나,
.을 사용해 변경된 모든 파일을 한 번에 Staging Area에 추가한다. - git status: 변경된 파일이나 Staging된 파일 등 현재 Git 상태를 확인한다.
- git commit -m "메시지": 커밋을 생성하며, m 옵션으로 커밋 메시지를 추가할 수 있다.
- git branch <브랜치명>: 새로운 브랜치를 생성하여 독립적으로 작업할 수 있다.
- git branch -M main: 기본 브랜치 이름을 main으로 변경한다.
- git switch <브랜치이름>: 특정 브랜치로 이동하며, git switch main으로 메인 브랜치로 돌아올 수 있다.
- git log --oneline --all --graph: 모든 브랜치와 커밋 내역을 한눈에 볼 수 있도록 그래프로 시각화해준다.
- git merge <브랜치명>: 메인 브랜치로 이동하여 지정한 브랜치를 메인 브랜치와 병합한다.
- git restore <파일명> 또는 git restore --source <커밋아이디> <파일명>: 특정 커밋 시점으로 파일을 복구한다.
- git restore --staged <파일명>: Staging Area에 있는 파일을 Unstaged 상태로 변경한다.
- git revert <커밋아이디> (여러 개 가능): 특정 커밋을 취소한다.
- git revert HEAD: 가장 최근 커밋을 취소한다.
- git reset --hard <커밋아이디>: 모든 변경 사항을 특정 커밋 시점으로 되돌립니다. 협업 중일 때는 주의가 필요하다.
- git reset --soft <커밋아이디>: 특정 커밋 시점으로 리셋하되, 변경 사항을 Staging Area에 남긴다.
- git reset --mixed <커밋아이디>: 특정 커밋 시점으로 리셋하며, 변경 사항을 Unstaged 상태로 유지한다.
- git push -u <저장소 주소> <브랜치명>: 로컬 브랜치의 변경 사항을 원격 저장소에 업로드한다.
u 옵션을 사용하면 이후부터 주소를 생략해도 된다. - git remote add <변수명> <주소>: 원격 저장소를 지정한 이름으로 등록한다.
이후 git push만으로 간편하게 푸시할 수 있다. - git clone <원격 저장소 URL>: 원격 저장소를 로컬에 복제한다.
- git pull: 원격 저장소의 최신 파일을 가져와 로컬에 병합한다.
- git stash: 현재 작업 중인 변경 사항을 임시로 저장해 둔다.
- git stash list: 저장한 임시 변경 사항 목록을 조회한다.
- git stash save "메모": 메모를 포함해 현재 변경 사항을 임시 저장한다.
- git stash pop: 가장 최근에 임시 저장한 변경 사항을 다시 불러온다.
- git stash drop <번호>: 지정한 Stash 항목 하나를 삭제한다.
- git stash clear: 모든 Stash 항목을 삭제한다.
- git fetch origin: 원격 저장소의 변경 사항을 가져오되 자동으로 병합하지는 않는다.
Git Flow
Git Flow는 협업과 코드 관리에 효율적인 Git 브랜칭 모델로,
각 브랜치의 역할을 명확히 정의해 안정적이고 체계적인 개발을 지원하는 방식이다.
주로 개발중인 코드와 릴리스된 코드를 구분하여, 작업 단계마다 브랜치를 나누어 사용하는 것이 특징이다.
주요 브랜치
Main 브랜치
main 브랜치는 항상 배포 가능한 코드 상태를 유지한다.
배포 준비가 완료된 코드만 이 브랜치에 병합되며, 소프트웨어 릴리스 후의 안정적인 상태를 대표한다.
Develop 브랜치
develop 브랜치는 새 기능과 버그 수정을 포함한 개발이 이루어지는 브랜치이다.
이 브랜치는 main에서 분기하며, 개발이 완료된 이후 main에 병합된다.
개발이 진행되는 주요 브랜치로,
모든 개발 완료 코드는 이 브랜치로 병합하여 테스트하거나 배포 준비를 한다.
지원 브랜치
Feature 브랜치
- 용도: 새 기능 개발을 위해 사용된다.
- 생성 위치: develop 브랜치에서 생성
- 병합 위치: 기능 개발이 완료되면 develop 브랜치로 병합된다.
- 네이밍 규칙: feature/기능명 (예: feature/user-login)
- 작업 방식: 독립적으로 개발할 기능마다 새로운 브랜치를 만들고, 기능 구현이 완료되면 develop에 병합한다.
Release 브랜치
- 용도: 다음 릴리스를 준비하는 브랜치이다.
- 생성 위치: develop 브랜치에서 생성
- 병합 위치: 릴리스 준비가 완료되면 main과 develop 브랜치에 병합된다.
- 네이밍 규칙: release/버전명 (예: release/1.0.0)
- 작업 방식: 릴리스 직전의 코드 정리와 최종 테스트가 이 브랜치에서 이루어진다.
이때 발생한 버그 수정도 release 브랜치에서 바로 수정하고 main과 develop에 병합한다.
Hotfix 브랜치
- 용도: main 브랜치에 존재하는 심각한 버그를 긴급하게 수정할 때 사용한다.
- 생성 위치: main 브랜치에서 생성
- 병합 위치: 수정 완료 후 main과 develop 브랜치에 병합된다.
- 네이밍 규칙: hotfix/버그명 (예: hotfix/fix-login-error)
- 작업 방식: 배포 중에 발견된 버그 수정 작업을 위한 브랜치이다. 수정 후 main에 병합하고,
수정 내용이 누락되지 않도록 develop에도 병합한다.
Git Flow 명령어 사용
Git Flow는 git-flow 플러그인을 설치하여 명령어로 쉽게 사용할 수 있다.
MacOS
brew install git-flow
Linux
sudo apt install git-flow
Windows
git clone --recursive <https://github.com/nvie/gitflow.git>
cd gitflow
make install
Git Flow는 아래와 같은 명령어로 쉽게 브랜치를 생성하고
병합해주므로 복잡한 브랜치 관리가 필요한 프로젝트에서 유용하다.
# Git Flow 초기화
git flow init
# Feature 브랜치 시작과 종료
git flow feature start <브랜치명>
git flow feature finish <브랜치명>
# Release 브랜치 시작과 종료
git flow release start <버전>
git flow release finish <버전>
# Hotfix 브랜치 시작과 종료
git flow hotfix start <버전>
git flow hotfix finish <버전>
'Git' 카테고리의 다른 글
Git 워크플로우 (0) | 2024.11.08 |
---|---|
GitLab 초기 설정 및 사용법 (2) | 2024.11.07 |