🔥 git log

855자
7분

git은 버전 관리 시스템이므로, 저장소의 변경 사항 히스토리를 확인하는 것이 매우 중요하겠죠? 이때 git log 명령어를 사용하면 커밋 히스토리를 확인할 수 있습니다. 기본적인 사용법은 아래와 같아요.

$ git log
commit 1ba1d9b62f5637f5634354a4f9dd81d23f2057c0 (HEAD -> feature/signup)
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 22:11:29 2024 +0900
 
    Update README.md
 
 
commit 2fa353fefce1095d375f6541f24af17091fec802
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:36:21 2024 +0900
 
    Delete README.md
 
 
commit caf90dee1b4c6b3b00c0149039d34864346e90e1 (main, feature/login)
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:07:32 2024 +0900
 
    Update README
 
 
commit 070ebaca5cd8eda7a17b5759dbe2b06c986e876c
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:07:24 2024 +0900
 
	Initial commit
 
 
commit 713d30794120139e6f55aba91c0e2830ada99ff0
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:00:54 2024 +0900
 
    Update hello.txt
 
 
commit 160ea51d9b3e1d3fdfcb0e22ba94f223646b9724
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 17:56:35 2024 +0900
 
    Add message
 
shell

위 예시에서 볼 수 있듯이 git log는 저장소의 커밋 히스토리를 최신 커밋부터 오래된 커밋 순서로 보여줍니다. 각 커밋은 SHA-1 해시, 작성자 정보, 날짜, 그리고 커밋 메시지를 포함하고 있죠.

옵션과 함께 사용하기

git log는 다양한 옵션과 함께 사용할 수 있어서 원하는 정보만 필터링하여 볼 수 있답니다. 자주 사용되는 옵션 몇 가지를 소개할게요.

  • -oneline: 각 커밋을 한 줄로 요약해서 보여줍니다.
$ git log --oneline
1ba1d9b (HEAD -> feature/signup) Update README.md
2fa353f Delete README.md
caf90de (main, feature/login) Update README
070ebac Initial commit
713d307 Update hello.txt
160ea51 Add message
9c5b645 Add hello.txt
fe5b5e0 (origin/main, origin/HEAD) update README.md
103d6c8 (origin/develop) Initial commit
shell
  • -graph: 브랜치와 머지 히스토리를 그래프로 보여줍니다.
$ git log --graph
* commit 1ba1d9b62f5637f5634354a4f9dd81d23f2057c0 (HEAD -> feature/signup)
| Author: CodingMax <biz.codingmax@gmail.com>
| Date:   Fri Mar 29 22:11:29 2024 +0900
|
|     Update README.md
|
* commit 2fa353fefce1095d375f6541f24af17091fec802
| Author: CodingMax <biz.codingmax@gmail.com>
| Date:   Fri Mar 29 18:36:21 2024 +0900
|
|     Delete README.md
|
* commit caf90dee1b4c6b3b00c0149039d34864346e90e1 (main, feature/login)
| Author: CodingMax <biz.codingmax@gmail.com>
| Date:   Fri Mar 29 18:07:32 2024 +0900
|
|     Update README
|
* commit 070ebaca5cd8eda7a17b5759dbe2b06c986e876c
| Author: CodingMax <biz.codingmax@gmail.com>
| Date:   Fri Mar 29 18:07:24 2024 +0900
|
|     Initial commit
|
shell
  • -stat: 각 커밋에서 수정된 파일들의 통계 정보를 보여줍니다.
$ git log --stat
commit 1ba1d9b62f5637f5634354a4f9dd81d23f2057c0 (HEAD -> feature/signup)
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 22:11:29 2024 +0900
 
    Update README.md
 
 README.md | 1 +
 1 file changed, 1 insertion(+)
 
 
commit 2fa353fefce1095d375f6541f24af17091fec802
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:36:21 2024 +0900
 
    Delete README.md
 
 README.md | 1 -
 1 file changed, 1 deletion(-)
 
 
commit caf90dee1b4c6b3b00c0149039d34864346e90e1 (main, feature/login)
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:07:32 2024 +0900
 
    Update README
 
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 
 
commit 070ebaca5cd8eda7a17b5759dbe2b06c986e876c
Author: CodingMax <biz.codingmax@gmail.com>
Date:   Fri Mar 29 18:07:24 2024 +0900
 
    Initial commit
 
 README.md | 4 +---
 hello.txt | 2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)
 
shell

이 외에도 --author, --after, --before 등 필터링 옵션이 많이 있으니 man git-loggit log --help로 확인해 보는게 좋을 것 같습니다.

로그 포맷 변경하기

git log--pretty 옵션을 사용하여 출력 포맷을 사용자 정의할 수도 있습니다. 미리 정의된 포맷으로는 oneline, short, medium, full, fuller, email, raw 등이 있고요. 또는 직접 포맷을 지정할 수도 있죠.

$ git log --pretty=format:"%h - %an, %ar : %s"
1ba1d9b - CodingMax, 25 minutes ago : Update README.md
2fa353f - CodingMax, 4 hours ago : Delete README.md
caf90de - CodingMax, 4 hours ago : Update README
070ebac - CodingMax, 4 hours ago : Initial commit
713d307 - CodingMax, 5 hours ago : Update hello.txt
160ea51 - CodingMax, 5 hours ago : Add message
9c5b645 - CodingMax, 5 hours ago : Add hello.txt
fe5b5e0 - codingmax, 5 hours ago : update README.md
103d6c8 - Sungcheol Kim, 5 hours ago : Initial commit
 
shell

위 예제에서는 해시의 앞 7자리(%h), 저자명(%an), 상대적 날짜(%ar), 요약 메시지(%s)를 보여주는 사용자 정의 포맷을 사용했어요.

활용 방법

저는 보통 아래와 같은 명령어를 사용하여 저장소의 커밋 로그를 간단히 확인한답니다.

$ git log --oneline --graph --decorate --all
* 1ba1d9b (HEAD -> feature/signup) Update README.md
* 2fa353f Delete README.md
* caf90de (main, feature/login) Update README
| * aec5901 (refs/stash) WIP on (no branch): 070ebac Initial commit
|/|
| * 2443c91 index on (no branch): 070ebac Initial commit
|/
* 070ebac Initial commit
* 713d307 Update hello.txt
* 160ea51 Add message
* 9c5b645 Add hello.txt
* fe5b5e0 (origin/main, origin/HEAD) update README.md
* 103d6c8 (origin/develop) Initial commit
 
shell
  • -oneline: 한 줄로 간략하게 보여줌
  • -graph: 브랜치/머지 그래프를 보여줌
  • -decorate: 브랜치와 태그 등의 참조를 보여줌
  • -all: 모든 브랜치의 로그를 보여줌

이렇게 하면 저장소의 전체적인 커밋 흐름을 한눈에 파악할 수 있어서 편리하죠. zsh을 사용하신다면 alias를 설정해 두는 것도 좋은 방법이에요. 예를 들어 .zshrc 파일에 아래와 같이 설정해 두면,

alias gl="git log --oneline --graph --decorate --all"
shell

gl이라고만 입력해도 위의 명령어가 실행되므로 편리하게 사용할 수 있습니다.

$ gl
* 1ba1d9b (HEAD -> feature/signup) Update README.md
* 2fa353f Delete README.md
* caf90de (main, feature/login) Update README
| * aec5901 (refs/stash) WIP on (no branch): 070ebac Initial commit
|/|
| * 2443c91 index on (no branch): 070ebac Initial commit
|/
* 070ebac Initial commit
* 713d307 Update hello.txt
* 160ea51 Add message
* 9c5b645 Add hello.txt
* fe5b5e0 (origin/main, origin/HEAD) update README.md
* 103d6c8 (origin/develop) Initial commit
 
shell

git log를 잘 활용하면 저장소의 히스토리를 파악하고 관리하는 데 도움이 될 거예요. 옵션도 다양하게 조합하여 사용해 보시고, 자신에게 맞는 로그 확인 방법을 찾아보세요!