Git 단계별 가이드
학습 목표
- Git의 개념과 필요성을 이해할 수 있다
- Git 설치 및 기본 설정을 할 수 있다
- 기본 Git 명령어를 사용할 수 있다
- 브랜치를 생성하고 관리할 수 있다
- 원격 저장소(GitHub)와 연동할 수 있다
- 협업 워크플로우를 이해하고 적용할 수 있다
1단계: Git이란?
1.1 Git의 개념
Git은 분산 버전 관리 시스템(Distributed Version Control System)입니다.
버전 관리란?
- 파일의 변경 이력을 추적하고 관리하는 것
- 언제든지 이전 버전으로 되돌릴 수 있음
- 여러 사람이 동시에 작업할 수 있음
Git의 장점:
- ✅ 변경 이력 추적
- ✅ 협업 용이
- ✅ 백업 및 복구
- ✅ 브랜치를 통한 병렬 개발
- ✅ 오프라인 작업 가능
1.2 Git vs 다른 도구
로컬 버전 관리:
- 파일 복사본 저장 (예:
project_v1,project_v2) - ❌ 비효율적, 실수 가능성 높음
중앙 집중식 버전 관리 (CVS, SVN):
- 중앙 서버에 모든 버전 저장
- ❌ 서버 장애 시 전체 작업 중단
분산 버전 관리 (Git):
- 각 개발자 컴퓨터에 전체 저장소 복사
- ✅ 서버 장애 시에도 작업 가능
- ✅ 오프라인 작업 가능
- ✅ 빠른 속도
1.3 Git의 작동 원리
작업 디렉토리 (Working Directory)
↓
스테이징 영역 (Staging Area)
↓
로컬 저장소 (Local Repository)
↓
원격 저장소 (Remote Repository)3가지 영역:
- Working Directory: 실제 파일이 있는 곳
- Staging Area: 커밋할 파일을 준비하는 곳
- Repository: 커밋된 파일들이 저장되는 곳
2단계: Git 설치 및 설정
2.1 Git 설치
Windows
- https://git-scm.com/download/win 접속
- 다운로드 후 설치
- 설치 중 기본 옵션 유지 (Next 클릭)
설치 확인
git --version
# 예: git version 2.40.0
2.2 Git 기본 설정
사용자 정보 설정 (필수)
# 전역 설정 (모든 프로젝트에 적용)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 설정 확인
git config --global user.name
git config --global user.email
추가 설정 (선택)
# 기본 에디터 설정 (VS Code 사용 시)
git config --global core.editor "code --wait"
# 기본 브랜치 이름을 main으로 설정
git config --global init.defaultBranch main
# 줄 끝 문자 처리 (Windows)
git config --global core.autocrlf true
# 색상 출력 활성화
git config --global color.ui auto
설정 확인
# 모든 설정 확인
git config --list
# 특정 설정 확인
git config user.name
3단계: Git 기본 명령어
3.1 저장소 초기화
새 프로젝트 시작
# 프로젝트 폴더로 이동
cd my-project
# Git 저장소 초기화
git init
# .git 폴더가 생성됨 (숨김 폴더)
기존 저장소 복제
# GitHub에서 저장소 복제
git clone https://github.com/username/repository.git
# 특정 폴더명으로 복제
git clone https://github.com/username/repository.git my-folder
3.2 상태 확인
현재 상태 확인
# 파일 상태 확인
git status
# 간단한 상태 확인
git status -s
상태 표시:
??: 추적되지 않는 새 파일A: 추가된 파일 (스테이징됨)M: 수정된 파일D: 삭제된 파일
변경사항 확인
# 수정된 내용 확인
git diff
# 스테이징된 내용 확인
git diff --staged
3.3 파일 추가 및 커밋
기본 워크플로우
# 1. 파일을 스테이징 영역에 추가
git add filename.txt
# 2. 모든 파일 추가
git add .
# 3. 특정 확장자만 추가
git add *.html
# 4. 커밋 (변경사항 저장)
git commit -m "커밋 메시지"
# 5. add와 commit 한 번에 (주의: 새 파일은 안 됨)
git commit -am "커밋 메시지"
커밋 메시지 작성 규칙
타입: 간단한 설명
상세 설명 (선택사항)타입 예시:
feat: 새로운 기능 추가fix: 버그 수정docs: 문서 수정style: 코드 포맷팅refactor: 리팩토링test: 테스트 추가chore: 빌드/설정 변경
예시:
git commit -m "feat: Add user login functionality"
git commit -m "fix: Resolve mobile menu display issue"
git commit -m "docs: Update README with installation guide"
3.4 커밋 이력 확인
커밋 로그 보기
# 전체 로그
git log
# 간단한 로그
git log --oneline
# 그래프로 보기
git log --oneline --graph
# 최근 5개만 보기
git log -5
# 특정 파일의 이력
git log filename.txt
커밋 상세 정보
# 특정 커밋의 상세 정보
git show <commit-hash>
# 예시
git show abc1234
3.5 파일 삭제 및 이름 변경
파일 삭제
# 파일 삭제 후 Git에 반영
git rm filename.txt
git commit -m "Remove filename.txt"
# 또는 파일만 삭제하고 Git에는 나중에 반영
rm filename.txt
git add filename.txt
git commit -m "Remove filename.txt"
파일 이름 변경
# 파일 이름 변경
git mv old-name.txt new-name.txt
git commit -m "Rename file"
4단계: 되돌리기 및 수정
4.1 스테이징 취소
# 스테이징 영역에서 제거 (파일은 유지)
git reset HEAD filename.txt
# 모든 파일 스테이징 취소
git reset HEAD
4.2 파일 변경사항 취소
# 작업 디렉토리의 변경사항 취소 (주의!)
git checkout -- filename.txt
# 또는 (Git 2.23+)
git restore filename.txt
# 모든 변경사항 취소
git restore .
⚠️ 주의: 이 명령어는 되돌릴 수 없습니다!
4.3 커밋 수정
마지막 커밋 메시지 수정
git commit --amend -m "새로운 메시지"
마지막 커밋에 파일 추가
git add forgotten-file.txt
git commit --amend --no-edit
마지막 커밋 취소 (파일은 유지)
# 커밋만 취소, 파일은 스테이징 영역에 유지
git reset --soft HEAD~1
# 커밋 취소, 파일은 작업 디렉토리에 유지
git reset --mixed HEAD~1
# 또는
git reset HEAD~1
# 커밋과 파일 변경 모두 취소 (주의!)
git reset --hard HEAD~1
4.4 특정 커밋으로 되돌리기
# 커밋 해시 확인
git log --oneline
# 특정 커밋으로 되돌리기
git reset --hard <commit-hash>
# 예시
git reset --hard abc1234
5단계: .gitignore 파일
5.1 .gitignore란?
Git이 추적하지 않을 파일/폴더를 지정하는 파일입니다.
5.2 .gitignore 생성
프로젝트 루트에 .gitignore 파일 생성:
# .gitignore 파일 생성
touch .gitignore
5.3 .gitignore 작성 예시
# 의존성
node_modules/
package-lock.json
yarn.lock
# 빌드 결과
dist/
build/
*.min.js
*.min.css
# 환경 변수
.env
.env.local
.env.production
# 운영체제
.DS_Store
Thumbs.db
desktop.ini
# 에디터
.vscode/
.idea/
*.swp
*.swo
*~
# 로그
*.log
logs/
# 임시 파일
*.tmp
*.temp
.cache/
# 특정 파일
config.json
secrets.txt
5.4 .gitignore 패턴
폴더명/: 폴더 전체 무시*.확장자: 특정 확장자 무시!예외파일: 예외 처리#: 주석
예시:
# 모든 .log 파일 무시
*.log
# 하지만 important.log는 추적
!important.log
# node_modules 폴더 무시
node_modules/
# build 폴더는 무시하지만 build/docs는 추적
build/*
!build/docs/
6단계: 브랜치 (Branch)
6.1 브랜치란?
브랜치는 독립적인 작업 공간입니다. 메인 코드에 영향을 주지 않고 새로운 기능을 개발하거나 실험할 수 있습니다.
브랜치의 장점:
- ✅ 안전한 실험 공간
- ✅ 병렬 개발 가능
- ✅ 기능별로 독립적 작업
6.2 브랜치 확인 및 생성
브랜치 목록 확인
# 로컬 브랜치 목록
git branch
# 원격 브랜치 포함
git branch -a
# 현재 브랜치 확인
git branch
# 또는
git status
브랜치 생성
# 브랜치 생성 (전환하지 않음)
git branch feature-login
# 브랜치 생성 및 전환
git checkout -b feature-login
# 또는 (Git 2.23+)
git switch -c feature-login
브랜치 전환
# 브랜치 전환
git checkout feature-login
# 또는 (Git 2.23+)
git switch feature-login
# 이전 브랜치로 돌아가기
git checkout -
6.3 브랜치 병합 (Merge)
기본 병합
# 1. 메인 브랜치로 전환
git checkout main
# 2. 최신 코드 가져오기
git pull origin main
# 3. 기능 브랜치 병합
git merge feature-login
# 4. 병합 후 브랜치 삭제 (선택)
git branch -d feature-login
병합 충돌 해결
충돌이 발생하면:
# 1. 충돌 파일 확인
git status
# 2. 파일 열어서 충돌 해결
# <<<<<<< HEAD
# 현재 브랜치 코드
# =======
# 병합할 브랜치 코드
# >>>>>>> feature-login
# 3. 충돌 해결 후
git add resolved-file.txt
git commit -m "Merge feature-login"
6.4 브랜치 삭제
# 로컬 브랜치 삭제
git branch -d feature-login
# 강제 삭제 (병합되지 않은 브랜치)
git branch -D feature-login
# 원격 브랜치 삭제
git push origin --delete feature-login
6.5 브랜치 전략
Git Flow (인기 있는 전략)
main (master)
└── develop
├── feature/login
├── feature/header
└── fix/mobile-menu브랜치 종류:
main: 프로덕션 코드 (항상 안정적)develop: 개발 브랜치feature/*: 새로운 기능fix/*: 버그 수정hotfix/*: 긴급 수정
예시:
# 기능 개발
git checkout -b feature/user-profile
# 작업 후
git checkout develop
git merge feature/user-profile
# 버그 수정
git checkout -b fix/button-style
# 작업 후
git checkout develop
git merge fix/button-style
7단계: 원격 저장소 (GitHub)
7.1 GitHub란?
GitHub는 Git 저장소를 호스팅하는 웹 서비스입니다.
GitHub의 기능:
- 원격 저장소 호스팅
- 협업 도구 (Pull Request, Issue)
- 코드 리뷰
- 프로젝트 관리
7.2 원격 저장소 연결
GitHub 저장소 생성
- GitHub.com 접속
- New Repository 클릭
- 저장소 이름 입력
- Create repository 클릭
로컬 저장소와 연결
# 원격 저장소 추가
git remote add origin https://github.com/username/repository.git
# 원격 저장소 확인
git remote -v
# 원격 저장소 이름 변경
git remote rename origin github
# 원격 저장소 제거
git remote remove origin
7.3 Push & Pull
Push (로컬 → 원격)
# 첫 푸시
git push -u origin main
# 이후 푸시
git push
# 특정 브랜치 푸시
git push origin feature-login
# 모든 브랜치 푸시
git push --all origin
Pull (원격 → 로컬)
# 원격 저장소의 변경사항 가져오기
git pull origin main
# 또는
git pull
Fetch (가져오기만, 병합 안 함)
# 원격 변경사항만 가져오기
git fetch origin
# 가져온 후 병합
git merge origin/main
7.4 Clone vs Fork
Clone (복제)
# 다른 사람의 저장소를 내 컴퓨터에 복사
git clone https://github.com/username/repository.git
Fork (포크)
- GitHub에서 다른 사람의 저장소를 내 계정으로 복사
- 원본 저장소와 독립적으로 관리
- Pull Request를 통해 원본에 기여 가능
8단계: 협업 워크플로우
8.1 기본 협업 흐름
1. 원격 저장소에서 최신 코드 가져오기
git pull origin main
2. 새 브랜치 생성
git checkout -b feature/new-feature
3. 작업 및 커밋
git add .
git commit -m "feat: Add new feature"
4. 원격에 푸시
git push origin feature/new-feature
5. Pull Request 생성 (GitHub에서)
6. 코드 리뷰 후 병합
7. 로컬에서 최신 코드 가져오기
git checkout main
git pull origin main8.2 Pull Request (PR)
Pull Request란?
- 내 브랜치의 변경사항을 메인 브랜치에 병합 요청
- 코드 리뷰를 받을 수 있음
- 협업의 핵심 도구
PR 생성 과정:
- 기능 브랜치에서 작업 완료
- GitHub에서 "New Pull Request" 클릭
- 변경사항 설명 작성
- 리뷰어 지정
- PR 생성
- 리뷰 후 병합 또는 수정 요청
8.3 충돌 해결
Pull 시 충돌
# 1. 최신 코드 가져오기
git pull origin main
# 2. 충돌 발생 시
# CONFLICT 메시지 확인
# 3. 충돌 파일 수정
# <<<<<<< HEAD
# =======
# >>>>>>>
# 4. 충돌 해결 후
git add .
git commit -m "Resolve merge conflict"
# 5. 다시 푸시
git push
8.4 협업 시 주의사항
✅ 해야 할 것:
- 작업 전 항상
git pull로 최신 코드 가져오기 - 작은 단위로 자주 커밋하기
- 명확한 커밋 메시지 작성
- 브랜치 전략 일관성 유지
❌ 하지 말아야 할 것:
main브랜치에 직접 커밋하지 않기- 다른 사람의 작업 중인 브랜치에 강제 푸시하지 않기
- 큰 파일을 저장소에 올리지 않기
.gitignore에 포함된 파일 커밋하지 않기
9단계: 실전 예제
9.1 새 프로젝트 시작하기
# 1. 프로젝트 폴더 생성
mkdir my-project
cd my-project
# 2. Git 초기화
git init
# 3. .gitignore 생성
echo "node_modules/" > .gitignore
echo ".env" >> .gitignore
# 4. 파일 생성 및 커밋
echo "# My Project" > README.md
git add .
git commit -m "Initial commit"
# 5. GitHub에 저장소 생성 후 연결
git remote add origin https://github.com/username/my-project.git
git branch -M main
git push -u origin main
9.2 기능 개발하기
# 1. 새 기능 브랜치 생성
git checkout -b feature/header
# 2. 파일 생성/수정
# header.html 작성
# styles.css 수정
# 3. 변경사항 커밋
git add .
git commit -m "feat: Add responsive header component"
# 4. 원격에 푸시
git push origin feature/header
# 5. GitHub에서 Pull Request 생성
# 6. 리뷰 후 병합되면
# 7. 메인 브랜치로 돌아가서 최신 코드 가져오기
git checkout main
git pull origin main
# 8. 기능 브랜치 삭제
git branch -d feature/header
9.3 버그 수정하기
# 1. 버그 수정 브랜치 생성
git checkout -b fix/mobile-menu
# 2. 버그 수정
# mobile-menu.css 수정
# 3. 커밋
git add .
git commit -m "fix: Resolve mobile menu display issue"
# 4. 푸시 및 PR
git push origin fix/mobile-menu
9.4 이전 버전으로 되돌리기
# 1. 커밋 이력 확인
git log --oneline
# 2. 특정 커밋으로 되돌리기
git reset --hard <commit-hash>
# 3. 강제 푸시 (주의!)
git push -f origin main
10단계: 고급 기능
10.1 Stash (임시 저장)
# 현재 작업 임시 저장
git stash
# 메시지와 함께 저장
git stash save "작업 중인 내용"
# 저장된 목록 확인
git stash list
# 가장 최근 stash 적용
git stash pop
# 특정 stash 적용
git stash apply stash@{0}
# stash 삭제
git stash drop stash@{0}
# 모든 stash 삭제
git stash clear
10.2 Tag (태그)
# 태그 생성
git tag v1.0.0
# 메시지와 함께 태그 생성
git tag -a v1.0.0 -m "Version 1.0.0 release"
# 태그 목록 확인
git tag
# 태그 푸시
git push origin v1.0.0
# 모든 태그 푸시
git push origin --tags
10.3 Cherry-pick
# 특정 커밋만 가져오기
git cherry-pick <commit-hash>
# 여러 커밋 가져오기
git cherry-pick <commit1> <commit2>
10.4 Rebase
# 현재 브랜치를 main 위에 재배치
git checkout feature-login
git rebase main
# 충돌 발생 시
# 1. 충돌 해결
# 2. git add .
# 3. git rebase --continue
# rebase 취소
git rebase --abort
11단계: 문제 해결
11.1 자주 발생하는 문제
문제 1: 커밋 메시지 잘못 입력
# 해결: 커밋 메시지 수정
git commit --amend -m "올바른 메시지"
문제 2: 잘못된 파일 커밋
# 해결: 마지막 커밋 취소
git reset --soft HEAD~1
# 파일 수정 후 다시 커밋
문제 3: 원격과 로컬 불일치
# 해결: 원격 코드 가져오기
git pull origin main
# 충돌 발생 시 해결 후
git add .
git commit -m "Resolve conflict"
git push
문제 4: 실수로 삭제한 파일 복구
# 해결: 커밋 이력에서 복구
git checkout HEAD -- filename.txt
11.2 유용한 명령어
# 현재 상태 한눈에 보기
git status
git log --oneline --graph --all
# 변경사항 요약
git diff --stat
# 누가 언제 무엇을 수정했는지
git blame filename.txt
# 파일 이력 추적
git log --follow filename.txt
12단계: 실습 과제
과제 1: 기본 워크플로우
- 새 폴더에 Git 저장소 초기화
- README.md 파일 생성 및 커밋
- index.html 파일 추가 및 커밋
- 커밋 이력 확인
과제 2: 브랜치 실습
feature/about브랜치 생성- about.html 파일 생성
- 커밋 후 main 브랜치에 병합
- 브랜치 삭제
과제 3: GitHub 연동
- GitHub에 새 저장소 생성
- 로컬 저장소와 연결
- 코드 푸시
- GitHub에서 확인
과제 4: 협업 시뮬레이션
- 두 개의 브랜치에서 동시에 작업
- 충돌 발생시키기
- 충돌 해결하기
- 병합하기
요약
필수 명령어 체크리스트
# 초기 설정
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 기본 워크플로우
git init
git add .
git commit -m "메시지"
git status
git log
# 브랜치
git branch
git checkout -b feature-name
git merge feature-name
# 원격 저장소
git remote add origin <url>
git push -u origin main
git pull origin main
git clone <url>
워크플로우 요약
1. git pull (최신 코드 가져오기)
2. git checkout -b feature-name (브랜치 생성)
3. 작업 및 수정
4. git add . (스테이징)
5. git commit -m "메시지" (커밋)
6. git push origin feature-name (푸시)
7. Pull Request 생성
8. 리뷰 후 병합
9. git checkout main (메인으로 전환)
10. git pull (최신 코드 가져오기)추가 학습 자료
- 공식 문서: https://git-scm.com/doc
- GitHub 가이드: https://guides.github.com
- 시각적 학습: https://learngitbranching.js.org
- Git Cheat Sheet: https://education.github.com/git-cheat-sheet-education.pdf
마무리
Git은 처음에는 어려워 보일 수 있지만, 자주 사용하다 보면 자연스럽게 익숙해집니다.
핵심은:
- 작은 단위로 자주 커밋하기
- 명확한 커밋 메시지 작성하기
- 브랜치를 적극 활용하기
- 협업 시 소통하기
꾸준한 연습으로 Git을 마스터하세요! 🚀
'개발 기록(Study Log) > 깃허브 사용 기록' 카테고리의 다른 글
| Git 설치 및 초기 설정 가이드 (0) | 2025.12.29 |
|---|