Git 기초편 3편 — git log를 트리로 보는 법

2026. 5. 10. 18:03·블로그, 컴퓨터/DevOps

git 연재글 썸네일

"Git을 공부하면서 쓰는 시리즈" 3편입니다.
1편: git init과 첫 커밋까지 · 2편: 브랜치, 어렵지 않아요


시작하면서

2편에서 브랜치를 만들고 커밋을 쌓았습니다. 이제 저장소 안에 브랜치가 두 개 있고, 커밋도 여러 개입니다.

그런데 git log만 치면 이렇게 나옵니다.

c1d2e3f 로그인 페이지 초안 추가
a9b3c12 README에 프로젝트 설명 추가
3f2a1b4 첫 번째 커밋: README 추가

세 줄이 그냥 쭉 나열됩니다. main에서 언제 갈라진 건지, feature/login이 지금 어디 있는지, 전체 구조가 어떻게 생겼는지 전혀 안 보입니다.

개발자들이 git log를 시각화해서 보는 GUI 툴을 많이 쓰는 이유가 여기 있습니다. Sourcetree나 GitLens 같은 것들이요. 그런데 알고 보면 터미널에서도 옵션 몇 개만 추가하면 비슷하게 볼 수 있습니다.


--oneline --graph --all

세 가지 옵션을 조합합니다.

git log --oneline --graph --all
* c1d2e3f (feature/login) 로그인 페이지 초안 추가
* a9b3c12 (HEAD -> main) README에 프로젝트 설명 추가
* 3f2a1b4 첫 번째 커밋: README 추가

아직 브랜치가 갈라지지 않아서 일직선으로 나오지만, 각 커밋 옆에 어느 브랜치가 있는지 보입니다. 브랜치를 더 만들고 커밋을 쌓으면 진짜 트리 모양이 나타납니다.

각 옵션이 무슨 역할인지 하나씩 봅니다.


옵션 하나씩 뜯어보기

--oneline

커밋 하나를 한 줄로 압축합니다.

git log --oneline
c1d2e3f 로그인 페이지 초안 추가
a9b3c12 README에 프로젝트 설명 추가
3f2a1b4 첫 번째 커밋: README 추가

기본 git log는 커밋마다 작성자, 날짜, 메시지까지 5줄씩 나옵니다. 커밋이 많을 때 전체 흐름을 보기 불편하기 때문에 --oneline으로 압축하면 한눈에 들어옵니다.

--graph

커밋 옆에 ASCII 아트로 브랜치 선을 그려줍니다.

git log --oneline --graph

브랜치가 갈라진 상황에서 이렇게 보입니다.

* c1d2e3f (feature/login) 로그인 페이지 초안 추가
| * f4e5d6c (fix/typo) 오타 수정
|/
* a9b3c12 (HEAD -> main) README에 프로젝트 설명 추가
* 3f2a1b4 첫 번째 커밋: README 추가

|와 / 기호로 브랜치가 갈라지는 지점이 표시됩니다. 여러 브랜치가 많아질수록 이 선들이 복잡해지는데, 구조를 파악하는 데 꽤 도움이 됩니다.

--all

현재 브랜치뿐 아니라 모든 브랜치의 커밋을 보여줍니다.

--all 없이 쓰면 현재 브랜치의 커밋만 나옵니다. main에 있을 때 --all을 빼면 feature/login에서 한 작업이 안 보입니다.

# main에서 실행, --all 없음
git log --oneline

# → feature/login 커밋은 안 나옴

전체 그림을 보려면 항상 --all을 붙이는 게 좋습니다.


merge 후에는 이렇게 보입니다

feature/login을 main에 merge하면 트리가 어떻게 생기는지 미리 보겠습니다.

git switch main
git merge feature/login
git log --oneline --graph --all
*   e7f8a9b (HEAD -> main) Merge branch 'feature/login'
|\
| * c1d2e3f (feature/login) 로그인 페이지 초안 추가
|/
* a9b3c12 README에 프로젝트 설명 추가
* 3f2a1b4 첫 번째 커밋: README 추가

|\와 |/가 브랜치가 갈라졌다가 다시 합쳐지는 모양을 나타냅니다. merge 커밋(e7f8a9b)이 두 브랜치를 이어주는 지점입니다. NerdTree에서 디렉토리가 펼쳐지고 닫히는 모양과 비슷한 느낌이에요.

이 구조가 2편에서 그림으로 봤던 것과 같습니다.

main:          C1 ── C2 ──── Merge
                         \  /
feature/login:            C3

매번 길게 치기 귀찮다면 — alias 설정

git log --oneline --graph --all은 자주 쓰기엔 너무 깁니다. 줄여서 쓸 수 있도록 별명(alias)을 등록해두면 편합니다.

git config --global alias.lg "log --oneline --graph --all"

이제 git lg만 치면 됩니다.

git lg
*   e7f8a9b (HEAD -> main) Merge branch 'feature/login'
|\
| * c1d2e3f (feature/login) 로그인 페이지 초안 추가
|/
* a9b3c12 README에 프로젝트 설명 추가
* 3f2a1b4 첫 번째 커밋: README 추가

--global 옵션을 붙이면 이 컴퓨터의 모든 Git 저장소에서 쓸 수 있습니다.


조금 더 예쁘게 — 색상과 날짜 추가

기본 --graph 출력은 흑백에 정보도 적습니다. 옵션을 더 붙이면 색상과 날짜, 작성자까지 함께 볼 수 있습니다.

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all

실행하면 이런 모양이 됩니다.

*   e7f8a9b - (HEAD -> main) Merge branch 'feature/login' (2 minutes ago) <홍길동>
|\
| * c1d2e3f - (feature/login) 로그인 페이지 초안 추가 (10 minutes ago) <홍길동>
|/
* a9b3c12 - README에 프로젝트 설명 추가 (1 hour ago) <홍길동>
* 3f2a1b4 - 첫 번째 커밋: README 추가 (2 hours ago) <홍길동>

커밋 해시는 빨간색, 브랜치 이름은 노란색, 경과 시간은 초록색, 작성자는 파란색으로 표시됩니다.

명령어가 길어서 외울 수 없으니 이것도 alias로 등록합니다.

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"

앞서 등록한 lg를 이걸로 덮어씁니다. 이제 git lg가 색상 버전으로 바뀝니다.


alias가 잘 등록됐는지 확인하기

git config --global --list
user.name=홍길동
user.email=hong@example.com
alias.lg=log --graph --pretty=format:...

alias.lg가 보이면 잘 등록된 겁니다.

등록된 alias를 지우고 싶으면 이렇게 합니다.

git config --global --unset alias.lg

alias 하나 더 — status 줄이기

git status도 길게 나오는 편입니다. 짧게 보는 옵션이 있습니다.

git status --short
M  README.md
?? newfile.txt

M은 수정됨(Modified), ??는 추적되지 않는 파일(Untracked)입니다. 이것도 alias로 등록해두면 편합니다.

git config --global alias.st "status --short"

이제 git st만 치면 됩니다.


지금까지 등록한 alias 정리

git config --global alias.lg "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 --short"

alias는 개인 취향이라 팀마다, 사람마다 다릅니다. 자주 쓰는 명령어가 생기면 그때그때 추가하면 됩니다.


이번 편 정리

옵션 / 명령어 하는 일
git log --oneline 커밋을 한 줄씩 압축해서 표시
git log --graph 브랜치 트리를 ASCII로 시각화
git log --all 모든 브랜치의 커밋을 표시
git log --oneline --graph --all 세 가지 조합, 가장 자주 쓰는 형태
git config --global alias.<단축어> "<명령>" 전역 alias 등록

다음 편 예고

브랜치를 나눠서 작업했으면 결국 합쳐야 합니다. 다음 편에서는 git merge를 다룹니다. fast-forward merge와 merge commit의 차이, 그리고 처음으로 마주치는 충돌(conflict)을 어떻게 해결하는지 알아봅니다.


이 시리즈의 다른 글

  • [기초편 1편] git init과 첫 커밋까지
  • [기초편 2편] 브랜치, 어렵지 않아요
  • [기초편 4편] merge와 충돌 해결
반응형
저작자표시 비영리 변경금지 (새창열림)

'블로그, 컴퓨터 > DevOps' 카테고리의 다른 글

Git 기초편 6편 — .gitignore 제대로 쓰기  (0) 2026.05.11
Git 기초편 5편 — 원격 저장소 연결하기  (0) 2026.05.11
Git 기초편 4편 — merge와 충돌 해결  (0) 2026.05.10
Git 기초편 2편 — 브랜치, 어렵지 않아요  (0) 2026.05.09
Git 기초편 1편 — git init과 첫 커밋까지  (0) 2026.05.09
'블로그, 컴퓨터/DevOps' 카테고리의 다른 글
  • Git 기초편 5편 — 원격 저장소 연결하기
  • Git 기초편 4편 — merge와 충돌 해결
  • Git 기초편 2편 — 브랜치, 어렵지 않아요
  • Git 기초편 1편 — git init과 첫 커밋까지
생각사람
생각사람
지극히 사적인 연구실
  • 생각사람
    생각사람의 별장
    생각사람
  • 전체
    오늘
    어제
    • 분류 전체보기 (207) N
      • 금융 (57)
        • 주식 공부 (11)
        • 파생상품 입문 (17)
        • 파생상품 기초 (15)
        • 파생상품 실전 (14)
      • 블로그, 컴퓨터 (83) N
        • 프로그래밍 (16)
        • DevOps (8)
        • AI, RL, ML, ... (5)
        • 애드센스, SEO (23)
        • 임베디드 (3)
        • 컴퓨터 관련 (7)
        • Cheatsheets (21) N
      • 다른 공부들 (67)
        • 읽고 쓰기 (18)
        • 수학 (15)
        • 물리 (9)
        • 사진 공부 (25)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    옵션 투자
    파생상품
    선물 옵션
    GIT
    cmake
    공업수학
    c++
    Kreyszig
    양자역학
    구글 애드센스
    c
    깃허브
    벡터
    코딩
    옵션
    독후감
    스트래들
    소니 a6000
    오펜하이머
    슈뢰딩거 방정식
    CheatSheet
    github
    version control
    AI
    스트랭글
    행렬
    깃
    웹크롤러
    프로그래밍
    선형대수학
  • hELLO· Designed By정상우.v4.10.6
생각사람
Git 기초편 3편 — git log를 트리로 보는 법
상단으로

티스토리툴바