개요
git reset으로 커밋을 취소하던 중 실수로 유지해야 하는 커밋도 함께 취소를 해버렸다. 방법을 찾던 중 reflog 명령여를 활용하는 방식이 있어 reflog라는 명령어 자체에 대해서 일단 알아보고자 한다.
reflog
로컬 저장소에서 HEAD 또는 브랜치가 업데이트된 시점을 기록한다. 이 이력은 로컬 저장소의 아래 경로에 기록된다.
.git/logs/ref/heads
# 또는
.git/logs/HEAD
즉, 변경 이력을 확인하고 싶다면 reflog 명령어가 아니라 위의 파일을 확인해도 된다.
reflog는 list, show, expire, delete 등 다양한 하위 명령어를 제공하고 있다. 이 글에서는 주로 show 명령어를 다루려고 한다.
사용법
기본적으로 아래와 같이 하위 명령어를 생략하여 사용하면 HEAD의 업데이트 이력을 확인할 수 있다.
git reflog
git reflog show HEAD
만약 특정 브랜치의 업데이트 이력을 확인하고 싶을 때는 브랜치명을 지정한다.
git reflog 'BRANCH'
출력 정보
reflog 결과는 다음의 정보를 포함하고 있다.
56823eb (HEAD -> main) HEAD@{0}: rebase (finish): returning to refs/heads/main
- commit_id : HEAD가 가리킨 커밋의 HASH 아이디를 나타낸다.
- branch : HEAD가 가리키는 브랜치명을 나타낸다.
- commit 순서 : HEAD로부터 몇 번째 커밋인지 나타낸다. HEAD@{0}이면 현재 상태이고, HEAD@{2}이면 현재로부터 2번 전의 이력임을 나타낸다.
- 작업 명령어 : 변경을 유발한 명령어를 확인할 수 있다. commit, rebase, reset, checkout, cherry-pick, merge 등이 포함된다.
- 커밋 메시지 : 변경 커밋의 메시지를 출력한다.
참고 문서
https://git-scm.com/docs/git-reflog
https://seosh817.tistory.com/297#Git%20reflog%EB%9E%80%3F-1