Git에서 유실된 Commit 복구해보자

윤학·2023년 3월 10일
0

Git

목록 보기
1/3
post-thumbnail

상황

현재 내가 local에서 코드를 작성해서 remote 저장소에 올리면 다시 EC2의 개발 서버내에서 업데이트된 코드를 동기화를 시켜서 사용중이였다.

근데 혼자 작업하다 보니 간단한건 바로 수정해서 서버 내에서 commit을 하고 내 local로 동기화를 시키는데(하면안됨) 이전에 fetch하고 FETCH_HEAD 브랜치로 이동한걸 까먹고 commit을 해버렸다..

그래서 다시 main브랜치(api-gateway)로 돌아와서 push하려 했더니 commit한게 사라져 있었다.

당황해서 checkout해보고 merge하고 난리가 났었는데 해결법은 간단했다.

그럼 시작!

해결에 도움을 줄 용어

Reflog

git에서 reflog는 해당 리포지토리에서 수행하는 모든 변경사항을 기록하고 로컬 리포지토리에서 수행한 모든 작업을 시간 순으로 정리한 기록이라고 생각하면 될 것 같다.

그래서 이 reflog를 보기 위해선 git reflog란 명령어로 조회를 할 수 있는데

이 조회 결과는 다음과 같다.

  • 이전에 bd762a commit에서 api-gateway브랜치로 checkout
  • 그 이전에 api-gateway 브랜치에서 origin/api-gateway로 checkout
  • 그 이전의 이전엔 bd762a commit에서 api-gateway로 checkout

이렇게 내가 수행했던 기록들 중 내가 가지고 오고 싶은 커밋의 해시값을 확인한다.

reflog의 항목을 참조해서 git checkout HEAD@{10}도 가능!

Cherry Pick

Cherry Pick이란 브랜치에서 커밋을 선택해서 다른 브랜치에 적용을 하는 행위이다.
따라서 git cherry-pickgit 커밋을 참조로 선택해서 현재 작업중인 HEAD에 추가할 수 있는 명령어로 가져오고자 하는 커밋을 가져와보자(하지만 rebase와 merge의 대체 명령어로는 사용해서는 안됨!!)
git cherry-pick <커밋 해시값>

이후 push를 해주면

성공!!

마치면서...

사실 자동으로 CI/CD를 구축해 놓았으면 이런 수고는 줄어들 것 같기 때문에 빠른 시일내에 구축해보자...

참조

Bitbucket 공식문서
Git 공식문서

profile
해결한 문제는 그때 기록하자

0개의 댓글