Git 가이드 - glasslego/getting-started-with-python GitHub Wiki

📚 Git이란?

Git은 버전 관리 시스템입니다. 코드의 변경사항을 기록하고 추적하여 다음과 같은 일들을 할 수 있습니다:

  • 파일의 변경 이력 확인
  • 이전 버전으로 되돌리기
  • 여러 사람과 협업
  • 백업 및 동기화

🔧 Git 설치 및 초기 설정

Git 설치

# macOS (Homebrew)
brew install git

# Ubuntu/Debian
sudo apt update
sudo apt install git

# Windows
# https://git-scm.com에서 다운로드

초기 설정

# 사용자 정보 설정 (필수)
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

# 기본 에디터 설정
git config --global core.editor "code --wait"  # VS Code
git config --global core.editor "nano"         # Nano

# 기본 브랜치 이름 설정
git config --global init.defaultBranch main

# 설정 확인
git config --list

🌟 Git 기본 개념

주요 용어

  • Repository (저장소): 프로젝트가 저장되는 곳
  • Commit: 변경사항을 저장하는 것
  • Branch: 독립적인 작업 공간
  • Remote: 원격 저장소 (GitHub, GitLab 등)

Git의 3가지 영역

Working Directory  →  Staging Area  →  Repository
   (작업 디렉토리)        (스테이징 영역)     (저장소)

🚀 Git 기본 명령어

1. 저장소 초기화

# 새 프로젝트 시작
mkdir my-project
cd my-project
git init

# 또는 GitHub에서 클론
git clone https://github.com/username/repository.git

2. 파일 추가 및 커밋

# 파일 생성
echo "Hello Git!" > hello.txt

# 상태 확인
git status

# 파일을 스테이징 영역에 추가
git add hello.txt

# 또는 모든 변경사항 추가
git add .

# 커밋 (변경사항 저장)
git commit -m "Add hello.txt file"

3. 변경사항 확인

# 변경사항 확인
git diff

# 커밋 이력 확인
git log

# 간단한 로그 확인
git log --oneline

📝 실습 예제: 첫 번째 Git 프로젝트

Step 1: 프로젝트 생성

# 프로젝트 폴더 생성
mkdir my-first-git-project
cd my-first-git-project

# Git 초기화
git init

# 상태 확인
git status

Step 2: 첫 번째 파일 추가

# README 파일 생성
echo "# My First Git Project" > README.md
echo "This is my first Git project!" >> README.md

# 상태 확인
git status
# 출력: 빨간색으로 "README.md" 표시 (추적되지 않는 파일)

# 스테이징 영역에 추가
git add README.md

# 상태 확인
git status
# 출력: 초록색으로 "README.md" 표시 (커밋 준비됨)

# 첫 번째 커밋
git commit -m "Initial commit: Add README.md"

Step 3: 파일 수정 및 추가 커밋

# 파일 수정
echo "## Features" >> README.md
echo "- Git 기본 기능 학습" >> README.md

# 새 파일 추가
echo "print('Hello, Git!')" > main.py

# 상태 확인
git status
# 출력: 
# - 수정된 파일: README.md (빨간색)
# - 새 파일: main.py (빨간색)

# 모든 변경사항 추가
git add .

# 커밋
git commit -m "Add features section and main.py"

# 커밋 이력 확인
git log --oneline

🌿 브랜치 작업

브랜치 기본 개념

  • main/master: 메인 브랜치
  • feature branch: 새 기능 개발용 브랜치
  • hotfix branch: 버그 수정용 브랜치

브랜치 명령어

# 현재 브랜치 확인
git branch

# 새 브랜치 생성
git branch feature/new-feature

# 브랜치 전환
git checkout feature/new-feature

# 브랜치 생성과 전환을 동시에
git checkout -b feature/login-system

# 브랜치 목록 확인
git branch

브랜치 실습 예제

# 새 기능 브랜치 생성
git checkout -b feature/user-authentication

# 새 파일 추가
echo "def login(username, password):" > auth.py
echo "    # 로그인 로직 구현" >> auth.py
echo "    pass" >> auth.py

# 커밋
git add auth.py
git commit -m "Add user authentication module"

# 메인 브랜치로 돌아가기
git checkout main

# 브랜치 병합
git merge feature/user-authentication

# 브랜치 삭제
git branch -d feature/user-authentication

🔄 원격 저장소 작업

GitHub 연결

# 원격 저장소 추가
git remote add origin https://github.com/username/my-project.git

# 또는 SSH 사용
git remote add origin [email protected]:username/my-project.git

# 원격 저장소 확인
git remote -v

# 첫 번째 푸시
git push -u origin main

일반적인 작업 흐름

# 1. 최신 변경사항 가져오기
git pull origin main

# 2. 작업 수행
echo "New feature code" > feature.txt
git add feature.txt
git commit -m "Add new feature"

# 3. 원격 저장소에 푸시
git push origin main

📊 Git 상태 확인 명령어

상태 및 이력 확인

# 현재 상태 확인
git status

# 변경사항 확인
git diff                    # 작업 디렉토리 vs 스테이징 영역
git diff --staged          # 스테이징 영역 vs 저장소
git diff HEAD~1            # 현재 vs 이전 커밋

# 커밋 이력 확인
git log                    # 상세한 로그
git log --oneline         # 간단한 로그
git log --graph           # 브랜치 그래프
git log --author="이름"   # 특정 작성자 커밋

⚡ 유용한 Git 명령어

파일 관리

# 파일 삭제
git rm file.txt
git commit -m "Remove file.txt"

# 파일 이름 변경
git mv old-name.txt new-name.txt
git commit -m "Rename file"

# 파일 무시하기 (.gitignore)
echo "*.log" >> .gitignore
echo "node_modules/" >> .gitignore
git add .gitignore
git commit -m "Add .gitignore file"

변경사항 되돌리기

# 작업 디렉토리 변경사항 취소
git checkout -- file.txt

# 스테이징 영역에서 제거
git reset HEAD file.txt

# 마지막 커밋 수정
git commit --amend -m "Updated commit message"

# 특정 커밋으로 되돌리기 (주의!)
git reset --hard COMMIT_HASH

🔧 일반적인 문제 해결

1. 커밋 메시지 실수

# 마지막 커밋 메시지 수정
git commit --amend -m "Correct commit message"

2. 잘못된 파일 커밋

# 파일을 스테이징에서 제거
git reset HEAD unwanted-file.txt

# 또는 커밋 후 파일 제거
git rm unwanted-file.txt
git commit -m "Remove unwanted file"

3. 브랜치 충돌 해결

# 충돌 발생 시
git merge feature-branch
# 충돌 메시지 출력

# 충돌 파일 수정 후
git add conflicted-file.txt
git commit -m "Resolve merge conflict"

📋 Git 워크플로우 예제

팀 프로젝트 워크플로우

# 1. 저장소 클론
git clone https://github.com/team/project.git
cd project

# 2. 새 기능 브랜치 생성
git checkout -b feature/payment-system

# 3. 작업 수행
echo "payment logic" > payment.py
git add payment.py
git commit -m "Implement payment system"

# 4. 원격 브랜치에 푸시
git push origin feature/payment-system

# 5. GitHub에서 Pull Request 생성
# (웹 인터페이스에서 진행)

# 6. 코드 리뷰 후 메인 브랜치에 병합
git checkout main
git pull origin main
git branch -d feature/payment-system

🎯 Git 베스트 프랙티스

커밋 메시지 작성 규칙

# 좋은 예시
git commit -m "Add user authentication feature"
git commit -m "Fix login button styling issue"
git commit -m "Update documentation for API endpoints"

# 나쁜 예시
git commit -m "fix"
git commit -m "update"
git commit -m "asdf"

커밋 메시지 컨벤션

# 타입: 간단한 설명
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
test: 테스트 추가
chore: 빌드 관련 수정

# 예시
git commit -m "feat: Add user registration API"
git commit -m "fix: Resolve memory leak in image processing"
git commit -m "docs: Update README with installation steps"

🛠️ 유용한 Git 도구

Git 별칭 설정

# 자주 사용하는 명령어 별칭
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --decorate"

# 사용 예시
git st      # git status
git co main # git checkout main
git lg      # git log --oneline --graph --decorate

.gitignore 예시

# .gitignore 파일 예시

# 운영체제 파일
.DS_Store
Thumbs.db

# 에디터 파일
.vscode/
.idea/
*.swp
*.swo

# 언어별 파일
# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.env

# Node.js
node_modules/
npm-debug.log
yarn-error.log

# Java
*.class
*.jar
*.war

# 로그 파일
*.log

# 임시 파일
*.tmp
*.temp

🚨 주의사항

하지 말아야 할 것들

# 1. 비밀번호나 API 키 커밋하지 않기
# 2. 대용량 파일 커밋하지 않기
# 3. 빈 커밋 메시지 사용하지 않기
# 4. main 브랜치에서 직접 작업하지 않기 (팀 프로젝트)
# 5. 다른 사람의 브랜치 강제 푸시하지 않기

안전한 Git 사용

# 항상 상태 확인 후 작업
git status

# 중요한 작업 전 백업
git stash  # 임시 저장

# 확신이 없을 때는 새 브랜치에서 실험
git checkout -b experimental

# 정기적으로 원격 저장소와 동기화
git pull origin main

🎓 학습 순서 추천

  1. 기초 명령어 익히기 (init, add, commit, status)
  2. 브랜치 사용하기 (branch, checkout, merge)
  3. 원격 저장소 연결 (remote, push, pull)
  4. 충돌 해결 (merge conflict)
  5. 고급 기능 (rebase, stash, cherry-pick)

📚 더 배우고 싶다면