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 reflog에 대하여 간단하게 알아봤습니다.
피드백 및 코멘트는 언제나 환영입니다!
감사합니다 :)
'개발 > git' 카테고리의 다른 글
Git - 삭제한 브랜치 & 커밋 복구 (0) | 2022.08.31 |
---|---|
Git - 브랜치 삭제하기(로컬/원격) 및 로컬 브랜치 사본 정리 (2) | 2022.08.31 |