본문 바로가기

Git,Github

Git 초보자들의 구원자 Reflog 알아보기

죽은 커밋도 예토전생이 가능하다

 

본인은 습관처럼 개발 관련 영어가 나오면 원뜻을 찾아보는 습관이 있다.

re + flog 인줄 알았으나 ref + log 였다 (...)

 

뭐 여튼 깃에서 커밋이던, 체크아웃이던 무슨 행동을 할때마다
깃은 그 정보를 기록한다.

 

예를들어 정말 간단한 txt 파일을 만들어서

master 에는 월요일과 화요일을 만들고,

weekend 브랜치에는 토요일, 일요일을 적은 간단한 파일을 만들었다.

 

이때 .git의 logs 폴더에 들어가면 HEAD란 파일이 있다.

이 파일을 메모장으로 열어보면 이런 내용이 있다.

 

이와같이 우리가 깃에서 하는 행동들을 기록해놓는 것이다.

이걸 바탕으로 우리는 사라진 커밋이나 심지어 Rebase를 취소할수도 있다.

 

보통은 막무가내로 Rebase를 시도했다가 이상하게 된 커밋 기록을 

다시 원상복구 하는데에 사용된다고 한다.

 

단 두가지 주의점이 있다

 

1. 내 로컬 git에서만 되지, github로 협업에는 적용되지 않는다

2. 영구 기록저장이 아닌, 약 90일 정도라고 한다.

 

그렇다면 Reflog로 Rebase를 취소해보자.

 

 

현재 커밋의 상태이다.

Interactive rebase를 통해 sunday 커밋을 saturday 컷에 합쳐버리는

fixup을 실행했다. 

 

 

작업에는 전혀 영향이 없으며, sunday를 saturday에 합쳐버리니

커밋 해시도 함께 재생성됐다.

 

근데 이것이 실수인것 같아 다시 원상복구 하기 위해서는

git reflog show weekend를 치면 다음과 같은 화면이 나온다

 

 

7자리 해시값을 참고하여 다시 weekend@{1}의 상태로 돌아가보자

 

git reset --hard 6e811ab를 실행하면 

 

 

해당 문구가 출력되며

다시 sunday 커밋과 saturday 커밋이 등장한다

 

상황에 따라서는 life-saver가 될수 있는 기능이다.

 

그러나 앞에서 말했다시피

 

1. 영구적이지 않음

2. 로컬에서만 가능

 

을 명심하자