개발/git

git - git reflog 란? (삭제된 브랜치 or 커밋 복구)

waterpole-dev 2022. 9. 7. 15:47
반응형

git reflog의 ref는 references. 즉 참조를 뜻 합니다.

ref log 참조의 기록이라고 생각하시면 기억하기 편하실 듯하네요ㅎ

참조의 기록이라 하면 commit, pull, branch swich(checkout)등의 기록들입니다.

 

여러 명령어들이 있지만 오늘은 3가지만 알아보도록 하겠습니다.


git reflog

가장 기본 명령어입니다. 찍어보시면

$git reflog

2be5f20c (HEAD -> dev) HEAD@{0}: commit: update UI
93289fbc HEAD@{1}: pull origin dev: Fast-forward
59fba352 HEAD@{2}: checkout: moving from main to dev

설명 전에 읽는 법은.

2 be 5 f20 c = 커밋 ID

HEAD@{2} = 참조의 순서 (작은 숫자가 가장 최근, 커밋 ID 대체 가능)

그 옆에 내용은 참조의 정보입니다.

 

아래서부터

59fba352 HEAD@{2}: checkout: moving from main to dev

  • main브랜치에서 dev브랜치로 변경

93289fbc HEAD@{1}: pull origin dev: Fast-forward

  • dev브랜치 pull

2be5f20c (HEAD -> dev) HEAD@{0}: commit: update UI

  • dev브랜치 작업 후 new commit 생성

git reflog show HEAD

사실 git reflog와 동일합니다.

문서를 보시면(저도 영어 잘 못해서 번역기 돌려가며 봅니다..) reflog에 다른 하위 명령이 없는 경우 git reflog show가 기본값이라고 적혀있습니다. 또한, show는 기본적으로 HEAD라고 되어있습니다.

 

실제로 git reflog, gir reflog HEAD를 찍어보시면 나오는 로그에는 별 차이가 없는 것을 확인하실 수 있습니다.


git reflog show BRANCH-NAME

show의 하위 명령어로 branch-name을 입력하게 되면, 해당 브랜치의 참조 기록만을 보여줍니다.

$git reflog show dev

2be5f20c (dev) dev@{0}: commit: update README
1d5e81bb dev@{1}: pull origin dev: Fast-forward


$git reflog show feat

2be5f20c (origin/HEAD, feat) feat@{0}: commit: add new feature
1d5e81bb (dev) feat@{1}: branch: Created from HEAD

보는 방법은 위 git reflog와 동일합니다.

차이점이라고 한다면 해당 브랜치의 로그만 보여준다는 것인데요.

 

위처럼 dev 브랜치에서 한번 pull을 받고 readme 파일을 업데이트한 후에 커밋, 그다음 기능 추가를 위해 feat 브랜치를 새로 만들어서 작업 후 commit.

했을 경우

show 뒤에 적은 브랜치 명에 해당하는 작업만 로그에 나오는 것을 확인하실 수 있습니다.


삭제된 브랜치 및 커밋 복구하기

$git branch -D feat

위 처럼 브랜치를 삭제하고 나면

$git reflog show feat을 했을 경우 에러가 나면서 해당 브랜치의 reflog는 더 이상 볼 수 없게 됩니다.

하지만, $git reflog( 혹은 $git reflog show 혹은 $git reflog HEAD)의 로그에는 삭제한 feat브랜치의 로그가 남아있습니다.

그렇기에 브랜치를 삭제해도 복구가 가능합니다.

 

자세하게는 commit의 동작원리, git의 파일 저장 원리 등을 알아야하는데, 이 부분은 아직 저도 공부가 부족해서 조금 더 공부 후에 포스팅해서 링크를 달도록 하겠습니다.

 

삭제된 브랜치 및 커밋 복구하는 방법은 이전에 올렸던

2022.08.31 - [개발/git] - Git - 삭제한 브랜치 & 커밋 복구

 

Git - 삭제한 브랜치 & 커밋 복구

몇 달 전에 브랜치를 따로 파서 작업 후 merge 해야 하는 브랜치에 merge 했다고 생각했는데, 한번 체크도 안 해보고 이전 포스팅처럼 브랜치를 삭제해 버린 제 불찰로 인해서 열심히 작업한 스크립

waterpole.tistory.com

포스팅을 확인해 주세요!


이렇게 git reflog에 대하여 간단하게 알아봤습니다.

피드백 및 코멘트는 언제나 환영입니다!

감사합니다 :)

반응형