2023. 2. 16. 13:00ㆍGit & Github
Reflog란?
Git Reflog는 HEAD의 위치가 변경될 때마다 log를 기록한다. .git 폴더의 logs > HEAD에 들어가면 새로운 커밋을 하거나 브랜치를 이동하거나, 혹은 특정 커밋으로 움직일 때 로그가 기록되는 걸 확인할 수 있다.
Reflog 명령어의 한계
log는 자신의 로컬 pc에서 일어나는 작업만 기록하기 때문에 공동 작업자와 log를 공유할 수 없다는 단점을 가지고 있다.
더군다나 log는 영구적으로 유지되는 기록이 아닌 90일 정도 보관 후 사라진다.
명령어
git reflog show HEAD
or
git reflog
git reflog 명령어는 show, expire, delete, exist와 같은 추가 명령어를 더해 사용한다. show 명령어만 흔히 사용되고 나머지는 잘 사용되지 않는다.
git reflog show 명령어로 HEAD나 특정 브랜치를 지정해 로그를 확인할 수 있다.
예시

명령어를 입력한 후 터미널의 모습이다. HEAD의 모든 변경사항을 로그로 남겨놨다. 상단의 로고가 가장 마지막(최근 시점)에 변경된 사항이고 아래로 내려가면 갈수록 이전의 데이터이다.(최근 -> 이전)
References
Reflog References
특정 로그를 name@{qualifier}로 검색하여 찾을 수 있다. 이러한 방법은 checkout, reset, merge, diff 명령어에서도 사용된다.
한 가지 주의해야 할 점은 HEAD~1과 HEAD@{1}과는 다르다는 점이다. HEAD~1은 가장 마지막에 이루어진 커밋(조상커밋)에서 1번째 전 커밋을 이야기하는 것이라면 HEAD@{1}은 최근에 기록된 로그에서 1번째 전 로그를 이야기하는 것이다.
로그는 커밋을 기록하는 것뿐만 아니라 브랜치를 변경하거나, detached HEAD 모두 기록하기 때문에 구별해서 사용해야 한다.

git reflog HEAD@{2}
해당 명령어를 사용하면 HEAD@{2} ~ 과거 데이터까지 출력된다.
Timed References
시간 및 기간을 이용해서 참조 로그를 찾을 수 있다.
예시
- 1.day.ago
- 3.minutes.ago
- yesterday
- Fri, 12 Feb 2021 14:06:21 -0800
복구하기
reset 복구하기
reflog 명령어를 이용하면 git reset으로 제거됐던 commit를 복구할 수 있다.
git reset --hard <commit-hash> 명령어를 사용하게 되면 해당 커밋 이후의 커밋들은 모두 사라지게 된다.
git reset --hard master@{Num}
그러나 위의 명령어를 사용하게 되면 특정 커밋을 재복구 할 수 있다.
rebase 복구하기
git rebase -i 명령어를 사용하면 commit한 기록을 정리할 수 있지만 실수로 합치거나 삭제한 게 있다면 reflog 명령어로 복구할 수 있다.
1. 해당 브랜치의 로그를 들여다보면 이전에 기록했던 모든 커밋들이 저장되어 있는 것을 확인할 수 있다.
git reflog show master
2. 돌아가고 싶은 커밋이 있다면 해쉬번호나 특정 참조를 복사하여 명령어를 사용하면 복구할 수 있다.
git reset <commit-hash>
'Git & Github' 카테고리의 다른 글
| [Git] Git Global Config 단축키 설정 (33) (0) | 2023.02.17 |
|---|---|
| [Git] tree, bolb, commit, tag _ git 객체 유형(31) (0) | 2023.02.15 |
| [Git] .git 파일과 해시번호 (30) (0) | 2023.02.14 |
| [Git] git tag란? (29) (0) | 2023.02.13 |
| [Git] Interactive Rebase란?_commit 수정, 삭제, 합치기 (28) (0) | 2023.02.12 |