상황
[1]
오늘도 git에 코드를 업데이트하기 위해서 로컬에서 작업을 하고 있는데..
로컬에만 commit을 해놓고, git push를 하지 않은 상태에서 reset으로 작업한 commit을 날릴 경우..
[2]
이전 커밋에서는 잘 동작하던 코드가 추가 작업을 하다 보니, 빌드가 안되기 시작..
git reset으로 이전 상태로 돌아가서 확인하고, 다시 돌아오려니, 커밋이 사라져버리는 경우..
(물론, 이런 경우는 git checkout을 이용하거나, git show를 이용하는 게 훨씬 안전할 듯..)
이미 일은 저질러버린 경우인데.. 로컬 commit들을 다시 살릴 수 있을까..
git reflog를 이용하자.
다행히, 친철하신 git 님은 이러한 문제를 해결하기 위한 방법을 만들어 놓으셨다.
바로 reflog라는 명령이이다.
먼저, git reflog로 뭘 하는 지 확인해보자.
1 | git reflog | cs |
1 2 3 4 | bs@ubuntu:test$ git reflog 2f6a6e0 HEAD@{0}: commit: test2 1fa8098 HEAD@{1}: commit: test1 d955248 HEAD@{2}: commit (initial): first commit | cs |
위처럼, git 명령어 내용들이 전부 나온다.
history 명령어와 같다고 생각하면 된다.
이제, git을 reset 으로 날려버리는 상황을 만들어 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 | bs@ubuntu:test$ git reset --hard HEAD~ HEAD의 현재 위치는 1fa8098입니다 test1 bs@ubuntu:test$ git pl * 1fa8098 - (HEAD -> master) test1 (2분 전) <bs> * d955248 - (origin/master) first commit (13분 전) <bs> bs@ubuntu:test$ git reflog 1fa8098 HEAD@{0}: reset: moving to HEAD~ 2f6a6e0 HEAD@{1}: commit: test2 1fa8098 HEAD@{2}: commit: test1 d955248 HEAD@{3}: commit (initial): first commit bs@ubuntu:test$ git reset --hard HEAD@{1} HEAD의 현재 위치는 2f6a6e0입니다 test2 | cs |
위의 예제를 보면, git을 reset 한 후에, reflog로 다시 확인한 경우이다.
이제 reset 했던 명령어를 되돌려보자.
이때도 마찬가지로 git reset을 이용한다.
다시 돌아가야할 위치는 HEAD@{1}이므로, git reset --hard HEAD@{1} 을 입력하자.
이후, 다시 로그를 확인하면, 원래대로 돌아오는 것을 확인할 수 있을 것이다.
1 2 3 | * 2f6a6e0 - (HEAD -> master) test2 (26분 전) <bs> * 1fa8098 - test1 (27분 전) <bs> * d955248 - (origin/master) first commit (38분 전) <bs> | cs |
자주 일어나는 상황이므로, 처음부터 작업하지 않고 해당 방법을 이용해서 갱생(?)의 기회를 얻어보자..
'프로그래밍 > etc. (Language)' 카테고리의 다른 글
[GIT] git 로그 커밋 히스토리 tig으로 편하게 보자 (0) | 2018.06.21 |
---|---|
[HTML] div 태그로 내용 숨기는 방법 (0) | 2018.05.25 |
Erlang 문법 정리 (2) - 원자, 리스트, 튜플, 패턴 매칭 (0) | 2018.03.14 |
Erlang 문법 정리 (1) - 주석, 변수, 표현 정리 (0) | 2018.03.11 |
Erlang 문법 정리 (0) - 우분투 Erlang 설치. (0) | 2018.03.04 |
댓글