히스토리 조회 및 상태 확인
로그 조회
기본 로그 보기
# 기본 로그
git log
# 한 줄로 간단하게
git log --oneline
# 그래프와 함께
git log --graph
# 모든 브랜치 로그
git log --all
# 조합 사용
git log --all --graph --oneline
로그 개수 제한
# 최근 5개 커밋만
git log -5
git log -n 5
# 최근 10개를 한 줄로
git log --oneline -10
# 더 자세한 정보와 함께
git log -3 --stat
로그 포맷팅
# 예쁜 로그 형식
git log --pretty=format:"%h - %an, %ar : %s"
# 커스텀 형식
git log --pretty=format:"%C(yellow)%h%C(reset) - %C(bold blue)%an%C(reset), %C(green)%ar%C(reset) : %s"
# 전체 그래프 로그 (추천)
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
시간 기반 필터링
# 특정 날짜 이후
git log --since="2023-01-01"
git log --since="2 weeks ago"
git log --since="yesterday"
# 특정 날짜 이전
git log --until="2023-12-31"
git log --until="1 week ago"
# 날짜 범위
git log --since="2023-01-01" --until="2023-12-31"
작성자 및 메시지 필터링
# 특정 작성자
git log --author="John Doe"
git log --author="john"
# 여러 작성자
git log --author="john\|jane"
# 커밋 메시지 검색
git log --grep="bug fix"
git log --grep="feat"
# 대소문자 구분 없이 검색
git log --grep="BUG" -i
특정 커밋 정보
커밋 상세 보기
# 최신 커밋 상세 정보
git show
# 특정 커밋
git show commit-hash
git show HEAD~1 # 이전 커밋
git show HEAD~2 # 2개 이전 커밋
# 브랜치의 최신 커밋
git show main
git show origin/main
커밋 변경사항만 보기
# 파일 목록만
git show --name-only HEAD
git show --name-only commit-hash
# 통계 정보와 함께
git show --stat HEAD
# 변경된 파일과 라인 수
git show --shortstat HEAD
특정 파일의 히스토리
# 파일 변경 히스토리
git log -- file.txt
# 파일명 변경 추적
git log --follow -- file.txt
# 파일의 각 라인 변경 히스토리
git blame file.txt
# 특정 라인 범위만
git blame -L 10,20 file.txt
브랜치 및 태그 정보
브랜치 정보
# 모든 브랜치 목록
git branch -a
# 브랜치와 마지막 커밋
git branch -v
# 원격 브랜치와의 관계
git branch -vv
# 머지된 브랜치 확인
git branch --merged
git branch --no-merged
태그 정보
# 태그 목록
git tag
# 패턴으로 태그 검색
git tag -l "v1.*"
# 태그 상세 정보
git show v1.0.0
# 태그가 가리키는 커밋
git rev-list -n 1 v1.0.0
차이점 비교
기본 diff
# 워킹 디렉토리 vs 스테이징
git diff
# 스테이징 vs 마지막 커밋
git diff --staged
# 워킹 디렉토리 vs 마지막 커밋
git diff HEAD
커밋 간 비교
# 두 커밋 비교
git diff commit1 commit2
# 현재 브랜치와 다른 브랜치 비교
git diff main
git diff origin/main
# 특정 파일만 비교
git diff main -- file.txt
브랜치 간 비교
# 브랜치 간 차이점
git diff main..feature-branch
# 공통 조상 이후 변경사항
git diff main...feature-branch
# 통계 정보만
git diff --stat main..feature-branch
검색 및 찾기
파일 내용 검색
# 현재 워킹 디렉토리에서 검색
git grep "search term"
# 특정 커밋에서 검색
git grep "search term" HEAD~1
# 파일 타입 지정
git grep "search term" -- "*.js"
# 라인 번호와 함께
git grep -n "search term"
커밋 찾기
# 특정 변경사항이 포함된 커밋 찾기
git log -S "function_name"
# 특정 코드가 추가/삭제된 커밋
git log -G "regex_pattern"
# 이진 탐색으로 버그 찾기
git bisect start
git bisect bad
git bisect good commit-hash
참조 로그 (reflog)
reflog 보기
# HEAD 변경 히스토리
git reflog
# 특정 브랜치의 reflog
git reflog show feature-branch
# 더 자세한 정보
git reflog --pretty=fuller
reflog 활용
# 잃어버린 커밋 복구
git reset --hard HEAD@{2}
# 삭제된 브랜치 복구
git checkout -b recovered-branch HEAD@{2}
# reflog 정리
git reflog expire --all --expire=now
git gc --prune=now
상태 확인
저장소 상태
# 기본 상태
git status
# 짧은 형태
git status -s
# 브랜치 정보 포함
git status -b
# 무시된 파일도 표시
git status --ignored
원격 저장소 상태
# 원격 저장소 정보
git remote -v
# 원격 브랜치 상태
git remote show origin
# 로컬과 원격 브랜치 비교
git status -uno # 추적되지 않는 파일 숨기기
유용한 별칭 설정
로그 관련 별칭
# 예쁜 로그
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 간단한 로그
git config --global alias.ls "log --oneline"
# 브랜치 그래프
git config --global alias.tree "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
상태 관련 별칭
# 상태 확인
git config --global alias.st "status"
# 차이점 확인
git config --global alias.df "diff"
# 브랜치 정보
git config --global alias.br "branch -vv"
출력 포맷 옵션
로그 포맷 옵션
%H : 커밋 해시 (전체)
%h : 커밋 해시 (축약)
%an : 작성자 이름
%ae : 작성자 이메일
%ad : 작성 날짜
%ar : 작성 날짜 (상대적)
%s : 커밋 제목
%b : 커밋 본문
%d : ref 이름
색상 옵션
%Cred : 빨간색
%Cgreen : 초록색
%Cblue : 파란색
%Cyellow : 노란색
%Creset : 색상 리셋
실용적인 조합 명령어
빠른 히스토리 확인
# 최근 변경사항 한눈에 보기
git log --oneline -10 && echo "--- Status ---" && git status -s
# 브랜치 관계 확인
git log --graph --oneline --all -10
# 파일별 최근 변경사항
git log --stat -5
디버깅을 위한 조회
# 특정 기능과 관련된 커밋 찾기
git log --grep="login" --oneline
# 특정 파일의 변경 히스토리
git log --follow --patch -- file.txt
# 코드 변경 추적
git log -S "function_name" --oneline