git reflog 기초
reflog란?
브랜치나 태그의 모든 변경사항을 기록한다.
The ‘reflog’ command keeps a Reference logs such as the commit snapshot of when the branch was created or cloned, checked-out, renamed, or any commits made on the branch are maintained by track of every single change made in the references (branches or tags) of a repository and keeps a log history of the branches and tags that were either created locally or checked out. Git and listed by the ‘reflog’ command. 참고링크 : Git Reflog — How To Recover A Deleted Branch That Was Not Merged
브랜치를 새로 만들면 git reflog에는 어떻게 기록될까?
현재 master에 체크아웃되어있는 상태에서 아래 명령어를 차례대로 입력했다.
1 | git branch issue#654 |
위 출력값에서도 알 수 있듯이 아무런 기록이 되지 않는다.
새로 만든 브랜치에 체크아웃한다면 reflog에는 어떻게 기록될까?
현재 master브랜치에서 위에서 새로만든 issue#654로 체크아웃했다.
1 | git checkout issue#654 |
체크아웃을 하자마자 체크아웃이 reflog에 기록되었다.
브랜치를 삭제하면 reflog에는 어떻게 기록될까?
기껏 만든 issue#654 브랜치를 삭제해보자
issue#654브랜치를 삭제하기위해서는 다른 브랜치에 head가 있어야한다.
master브랜치로 체크아웃한 뒤 진행해보자.
1 | git checkout master |
브랜치 삭제하는 것은 로그가 찍히지 않는다.
브랜치를 되살려보자
삭제한 issue#654 브랜치를 되살려보자
HEAD@{0} 과 HEAD@{1}은 체크아웃상태밖에 없는데 어떤 걸로 체크아웃해야할까?
궁금해서 둘다 해봤다.
HEAD@{0}: checkout: moving from issue#654 to master
을 되살리기1
2
3
4
5
6git checkout -b issue#654 HEAD@{0}
$ git branch
issue#641
* issue#654
masterHEAD@{1}: checkout: moving from issue#654 to master
을 되살리기1
2
3
4
5
6git checkout -b issue#654 HEAD@{0}
$ git branch
issue#641
* issue#654
master
둘 다 브랜치를 살리는 동일한 결과를 가져왔고 head도 issue#654로 동일했다.
요약
- 브랜치 새로 생성은 로그가 찍히지않는다.
- HEAD@{1}은 issue#654브랜치를 새로만들고 체크아웃한 로그이다.
- HEAD@{0}은 issue#654브랜치에서 master브랜치로 체크아웃한 로그이다.
- 브랜치 삭제도 로그가 찍히지않는다.