현재 내가 local에서 코드를 작성해서 remote 저장소에 올리면 다시 EC2의 개발 서버내에서 업데이트된 코드를 동기화를 시켜서 사용중이였다.
근데 혼자 작업하다 보니 간단한건 바로 수정해서 서버 내에서 commit을 하고 내 local로 동기화를 시키는데(하면안됨) 이전에 fetch하고 FETCH_HEAD 브랜치로 이동한걸 까먹고 commit을 해버렸다..
그래서 다시 main브랜치(api-gateway)로 돌아와서 push하려 했더니 commit한게 사라져 있었다.
당황해서 checkout해보고 merge하고 난리가 났었는데 해결법은 간단했다.
그럼 시작!
git에서 reflog는 해당 리포지토리에서 수행하는 모든 변경사항을 기록하고 로컬 리포지토리에서 수행한 모든 작업을 시간 순으로 정리한 기록이라고 생각하면 될 것 같다.
그래서 이 reflog를 보기 위해선 git reflog
란 명령어로 조회를 할 수 있는데
이 조회 결과는 다음과 같다.
이렇게 내가 수행했던 기록들 중 내가 가지고 오고 싶은 커밋의 해시값을 확인한다.
reflog의 항목을 참조해서 git checkout HEAD@{10}도 가능!
Cherry Pick이란 브랜치에서 커밋을 선택해서 다른 브랜치에 적용을 하는 행위이다.
따라서 git cherry-pick
은 git 커밋을 참조로 선택해서 현재 작업중인 HEAD에 추가할 수 있는 명령어로 가져오고자 하는 커밋을 가져와보자(하지만 rebase와 merge의 대체 명령어로는 사용해서는 안됨!!)
git cherry-pick <커밋 해시값>
이후 push를 해주면
성공!!
사실 자동으로 CI/CD를 구축해 놓았으면 이런 수고는 줄어들 것 같기 때문에 빠른 시일내에 구축해보자...