
"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 |