본문 바로가기
Git

[Git] git log, git reflog로 commit 히스토리 조회하기 (3)

by 아마도개발자 2023. 11. 27.

 

 앞선 포스팅을 통해 로컬 레포지토리의 변경사항들을 원격 레포지토리로 반영하는 법을 배웠다. 

작업을 하고, 로컬 레포지토리에 업로드하는 과정들을 반복하다 보면 어느새 수 많은 commit들이 쌓이게 된다.  개발을 하다보면 쌓여진 commit들에서 이전 시점의 개발 내용이나 코드 변경사항 등을 확인하게 되는 순간들이 올 것이다. 이번 포스팅에서는 git log 명령어를 통해 내 commit 내용을 조회하는 방법을 알아보자. 

 

 

실습을 위해 example1.md, example2.md, example3.md, example4.md 를 하나씩 생성하고, 커밋을 해주었다.

이후 git log 커맨드를 입력해보면 

 

 

위와 같이 내가 커밋한 내역들을 순서대로 볼 수 있게 된다. 커밋 내역을 간략하게 설명하면

commit: 내 커밋의 ID이다. 이 커밋ID를 통해 commit을 수정 혹은 삭제 등 제어가 가능하다.

Author: 커밋한 사람의 아이디를 나타낸다.

Date: 커밋 날짜를 나타낸다.

그리고 아래에는 내 커밋 메시지가 표기된다.

 

 

VS code의 그래프로 확인해보면

 

이렇게 조금 더 깔끔한 GUI로 확인할 수 있다. 특히, 좌측에 있는 그래프는 나중에 브랜치 수가 많아지고, 협업을 할 때 흐름을 이해하는데 큰 도움이 된다.

 

 

git log를 사용하면 이렇게 git commit 히스토리를 조회할 수 있다.

하지만 git log로 내가 작성한 모든 커밋을 볼 수 있는 것은아니다. git을 사용하다보면 git rebase 또는 git reset 커맨드를 통해 commit을 삭제하는 경우가 발생하기도 한다. git log는 삭제한 commit에 대한 내용은 보여주지 않기 때문에 

git reflog라는 명령어를 통해 내가 작성한 모든 commit들을 가져올 수 있다.

 

 

이렇게 git reflog로 조회한 히스토리에는 현재 살아있는 commit 뿐만 아니라 revert, rebase에 대한 커밋 내역도 볼 수 있다.

HEAD@ 뒤에 붙는 숫자를 통해 내가 현재 가리키고 있는 COMMIT으로 부터 몇번째 참조인지를 확인 할 수 있고, 이것을 활용하여 rebase와 revert 커맨드와 함께 사용할 수 있다.(rebase와 revert에 관해서는 다음 포스팅에서 다루기로 하자)

 

reflog를 사용하는 또 하나의 경우는 커밋에서 커밋을 생성한 경우이다. 커밋에서 커밋을 생성하는 경우는 언제일까?

위에 만든 예제로 다시 돌아가보자.

 

현재 나는 'e1e0e276'이라는 커밋을 가리키고 있다.( 커밋 메시지 왼쪽에 표시를 보면 알 수있다) 그런데 원인불명의 이유로 인해 'e28595b8' 커밋으로 돌아가서 다시 작업을 해야하는 경우가 있다고 가정해보자.

 

우선 git checkout <commit ID> 명령어로 e28595b8 커밋을 한 시점으로 돌아간다.( checkout은 브랜치 뿐만 아니라 커밋으로의 이동도 가능하다)

 

VS code로 확인해보면 현재 HEAD가 e28595b8를 가리키고 파일 목록에도 e28595b8 시점에서는 작성되지 않았던example3.md, example4.md 파일이 사라져 있는 것을 볼 수 있다. 

여기서 example3,4 파일 없이 example5.md만 추가되는 것이 개발목표라고 가정하면 아래와 같은 그래프 형태가 될 것이다. 

 

이 상황에서 bash창에서 git log 커맨드를 입력하면

 

이렇게 단 3개의 커밋내역만 확인할 수가 있다. example3 추가 커밋과 example4 추가 커밋을 확인할 수가 없는 것이다. 마찬가지로 다시 example4 파일 추가 커밋인 'e1e0e276'으로 돌아가 보면

 

 

log, reflog 결과

 

 

이렇게 git log로 확인했을 때, example5.md에 대한 커밋인 640fe48c 커밋이 흔적도 없이 사라진 반면 git reflog에서는 모든 commit을 찾을 수 있다.

 

이번 포스팅에서는 git log와 git reflog 명령어에 대해 알아보았다. 다음 포스팅에서는 commit의 수정과 관련된 명령어들을 실습해보도록 하겠다.