ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • git log에 최신 커밋이 안 보일 때 복원하기
    Git 2024. 1. 4. 21:20

     

    Git 작업을 하다가 잘못된 명령어 조작으로 한참 뒤의 commit으로 돌아가 HEAD로 위치하게 되었고

    git log로 살펴보니 돌아가버린 commit 시점으로부터 앞의 commit들(원래 HEAD가 위치했던)이

    보이지 않아 당황했다...

    돌아가고 싶은 commitID만 알면 되는데... 그 commit들이 git log를 통해 보이질 않으니 순간 블랙 아웃

     

     

     

    그렇게 폭풍 구글링을 하다가 나를 구원해줄 블로그를 찾았다.

    https://www.letmecompile.com/git-restore-lost-commits/

     

    깃(Git) 에서 유실된 커밋(commit) 복원하기

    깃(Git)을 이용하여 작업을 하다가 리베이스(rebase) 실수 또는 잘못된 명령어나 조작 실수 등 다양한 이유로 인해 자신의 피땀눈물이 담긴 커밋(commit)들을 날려먹는 경우가 은근히 있다. remote에 pus

    www.letmecompile.com

    나와 같은 상황에서 git reflog를 사용해서 모든 commit들을 조회할 수 있다고 한다.

    해당 글의 댓글을 보니 목숨을 건진 여러 개발자들이 보였다. (작성자님 사랑해요)

     

     

     

    git reflog

     

    git reflog에서 reflog는 reference log를 의미하며, 위 명령어가 실행되면 tree에 일반적으로 보이지 않는

    모든 commit들을 살펴볼 수 있다. 여기서 사라진 commit을 찾아 해당 commitID를 가지고 명령어들을 수행해주면 된다.

     

     

    복원 실패

    git checkout [commitID]

     

    git checkout을 통해 해당 시점의 커밋으로 돌아가려 했으나,

     

    위 사진과 같이 이전 commit으로 돌아가면서 stage에 위와 같은 내용들이 올라가 있었고

    해당 문제 때문에 commitID 시점으로 돌아갈 수 없었다.

    stash를 하려고 했지만, 이전에 작업했던 내용들을 git stash를 한 상태라 꼬일까봐 망설여졌다.

     

     

    복원 성공

    git reset --hard [commitID]

     

     git reset --hard는 Git에서 작업 디렉토리, 스테이징 영역

    그리고 커밋 히스토리를 변경하는 강력한 명령어이다.

    이전에 Git에 대해 배울 떄, --hard는 작업 디렉토리와 스테이징 영역이 이전 커밋으로 완전히 재설정되고, 따라서 이전에 커밋한 내용들이 모두 사라지게 되어 데이터 손실을 초래할 수 있다는 얘기를 들었었다.

     

    그러나 지금 같은 상황에서는 너무 좋은 명령어였던 거 같다.

    복구 완료!

    'Git' 카테고리의 다른 글

    알아두면 유용한 Git 용어/명령어 정리  (0) 2023.11.03
Designed by Tistory.