개발/git

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

waterpole-dev 2022. 8. 31. 23:08
반응형

몇 달 전에 브랜치를 따로 파서 작업 후 merge 해야 하는 브랜치에 merge 했다고 생각했는데, 한번 체크도 안 해보고

이전 포스팅처럼 브랜치를 삭제해 버린 제 불찰로 인해서 열심히 작업한 스크립트가 전부 날아가버리는 불상사가 발생했었습니다...

 

그때는 멘탈이 바스러졌지만, 지금은 역시 아찔하네요...

그래도 그때 열심히 구글링을 통해  해결을 했었던 기억이 나네요ㅎㅎ

 

이 방법이 무조건 100% 정답은 아니겠지만, 혹시 저와 같이 불상사를 저질러버려서 해결 방법을 찾으시는 분들에게 조금이라도 도움이 됐으면 합니다.

 

*로컬 브랜치에 한함 github이나 gitlab 등의 remote 브랜치를 삭제했다면 안타깝게도... 가 아니라 git은 항상 로컬 브랜치의 reflog만 저장하지만, 해당 브랜치를 체크아웃한 적이 있다면 가능합니다*


커밋 기록 확인

git reflog

자 이제 커밋 로그를 확인해 봅시다.

예시

로그를 보는 법은 좌측부터

  • commit id(노란색)
  • HEAD가 이동된 index(HEAD@{???})
  • 내용

입니다.

 

브랜치 복구

git checkout -b 삭제된-브랜치-이름 HRAD@{INDEX}

만약, 브랜치 이름을 다르게 복구하고 싶으면 "삭제된-브랜치-이름" 부분을 변경해주면 됩니다.

 

커밋 복구

git reset --hard COMMIT-ID

참 쉽죠??

 


어떻게 복구할 수 있나요?

reflog와 commit의 동작 원리, git의 파일 저장/복구 원리와 관련이 있는데

이 점은 해당 글에서는 주제가 멀어지는 거 같아서 추후 작성해서 이곳에 링크를 추가하도록 하겠습니다.

 

git reflog란?

2022.09.07 - [개발/js] - git - git reflog 란? (삭제된 브랜치 or 커밋 복구)

 

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

git reflog의 ref는 references. 즉 참조를 뜻 합니다. ref log 참조의 기록이라고 생각하시면 기억하기 편하실 듯하네요ㅎ 참조의 기록이라 하면 commit, pull, branch swich(checkout)등의 기록들입니다. 여러..

waterpole.tistory.com

 


감사합니다!

반응형