Git 핵심 개념과 실용 명령어 가이드

분산형 버전 관리 시스템 Git의 기초와 활용

Git은 코드 변경 이력을 추적하고 팀원 간 협업을 효율적으로 지원하는 분산형 버전 관리 도구입니다. 로컬 머신에서도 완전한 저장소를 유지하며, 네트워크 없이도 커밋, 브랜치 생성, 병합 등의 작업이 가능합니다.

작업 영역과 파일 상태

Git은 작업 과정에서 세 가지 주요 영역으로 나뉩니다:

영역목적대응 상태
작업 디렉터리(Working Directory)현재 수정 중인 파일 보관modified
스테이징 영역(Staging Area)커밋 대기 중인 변경 사항 저장staged
로컬 저장소(Local Repository)완료된 커밋 기록 보관committed

기본 로컬 작업

저장소 초기화

  • git init: 현재 폴더를 Git 저장소로 변환
  • git init project-name: 지정된 이름의 새 저장소 생성
  • git init --bare shared-repo.git: 공유 목적의 베어 저장소 생성 (작업 디렉터리 없음)

변경 사항 추가 및 커밋

  • git add filename: 특정 파일을 스테이징 영역에 등록
  • git add .: 모든 변경 사항을 스테이징
  • git commit -m "설명 메시지": 스테이징된 내용을 커밋
  • git commit --amend: 직전 커밋에 새로운 변경을 통합하거나 메시지를 수정

상태 확인

  • git status: 현재 작업 디렉터리와 스테이징 상태 조회
  • git log --oneline: 최근부터 순차적인 커밋 기록 요약 출력
  • git reflog: 로컬에서 수행한 모든 동작 기록 확인 (삭제된 커밋 복구에 유용)

버전 되돌리기 전략

리셋 모드 비교

git reset 명령은 다음 세 가지 옵션으로 동작 방식이 달라집니다:

# 혼합 리셋 (기본값): 스테이징과 저장소는 이전 상태로, 작업 디렉터리는 유지
git reset --mixed HEAD~2

# 소프트 리셋: 저장소만 이전 상태로, 작업 및 스테이징 내용 유지
git reset --soft HEAD~1

# 하드 리셋: 모든 변경 사항 삭제 후 지정 커밋 상태로 강제 복귀
git reset --hard HEAD~3

안전한 취소: 리버트

git revert <commit-hash>는 특정 커밋의 변경을 반전시키는 새로운 커밋을 생성합니다. 과거 기록을 수정하지 않으면서도 효과적으로 문제를 해결할 수 있어 협업 환경에서 권장됩니다.

브랜치 운영 전략

브랜치 조작 명령

  • git branch feature/login: 새 브랜치 생성
  • git checkout -b hotfix/critical: 브랜치 생성과 동시에 전환
  • git switch main: 다른 브랜치로 전환 (Git 2.23+)
  • git merge feature/ui: 기능 브랜치를 현재 브랜치에 병합

병합 방식

패스트 포워드 병합: 기준 브랜치에 추가 커밋이 없을 때, 단순히 포인터를 이동시켜 직선적인 이력 유지

비-패스트 포워드 병합: git merge --no-ff 사용 시 항상 병합 커밋 생성. 브랜치의 존재 흔적을 명확히 남김

고급 기능 활용

체리 픽

특정 커밋만을 선택적으로 다른 브랜치에 적용할 수 있습니다:

git cherry-pick abc123def  # 단일 커밋 복제
git cherry-pick abc123 def456  # 다수 커밋 연속 적용

인터랙티브 리베이스

과거 커밋 기록을 재구성하는 강력한 도구입니다:

git rebase -i HEAD~4
  • reword: 커밋 메시지 수정
  • squash/fixup: 여러 커밋 병합 (메시지 유지/삭제 여부 차이)
  • drop: 불필요한 커밋 제거
  • edit: 커밋 후 수정 삽입

원격 저장소 연동

초기 설정

git remote add origin https://github.com/user/repo.git
git push -u origin main

데이터 동기화

  • git fetch origin: 원격 정보만 가져오고 로컬에 저장 (자동 병합 없음)
  • git pull origin main: fetch + merge 한 번에 실행
  • git push origin main: 로컬 커밋을 원격 저장소에 전송

브랜치 매핑 규칙

# 원격 브랜치 기반으로 로컬 브랜치 생성
git fetch origin dev:local-dev

# 원격 브랜치 삭제
git push origin --delete stale-branch

# 태그 전송
git push origin v1.0.0

파일 속성 설정

.gitattributes 파일을 통해 특정 형식의 파일을 어떻게 처리할지 정의할 수 있습니다.

이진 파일 처리 예시

예: Word 문서를 사람이 읽을 수 있는 형태로 비교

# .gitattributes
*.docx diff=pandoc
# .git/config
[diff "pandoc"]
    textconv = pandoc --to=markdown

학습 자원 추천

Learn Git Branching는 시각화된 트리 구조를 통해 브랜치, 병합, 리베이스 등의 개념을 게임처럼 익힐 수 있는 인터랙티브 학습 플랫폼입니다. 모든 동작이 실시간으로 시각화되어 직관적인 이해가 가능합니다.

태그: Git 버전관리 분산저장소 브랜치 리베이스

7월 5일 23:40에 게시됨