섹션2. Git References

1. branch, tag, HEAD

1.1. 만약 특정 시점을 기억하고 싶다면?

  • 특정 해시 값을 저장하는 방법은 branch, tag 방법이 있다.

  • 두 방 법은 다음과 같은 차이점이 있다.

    • tag 는 새로운 변경이 생기더라도 특정 시점의 해시값만 바라보고 있다. (해시 이동 X)

    • branch 는 새로운 커밋이 생긴다면 최신 시점으로 계속해서 최신화 된다. (해시 이동 O)

1.1.1 tag

  • .git/refs/tags 경로에 태그들이 존재한다.

  • 실제 cat 명령어를 통해서 특정 태그를 열어보면, 특정 커밋의 해시값이 조회된다.

  • 만약, 파일을 열어 의도하는 시점의 커밋 해시값으로 변경한다면 해당 시점으로 태그가 설정된다.

    • 하지만 의도하지 않은 방향대로 움직일 수 있기 때문에, 권장하지 않는다.

  • 실제 변경하기를 원한다면 아래 명령어를 사용한다.

    • 생성 : git tag [tag 이름]

    • 삭제 : git tag -d [tag 이름]

1.1.2 branch

  • .git/refs/heads 경로에 브랜치들이 존재한다.

  • 실제 cat 명령어를 통해서 특정 브랜치를 열어보면, 특정 커밋의 해시값이 조회된다.

  • 만약, 파일을 수정하고 새로운 커밋을 생성한다면 해당 브랜치의 값은 새로운 커밋의 해시값으로 업데이트 된다.

  • 하지만 우리는 프로젝트 작업시 여러개의 브랜치를 관리하는 경우가 많다.

    • HEAD 파일에 내가 어떤 브랜치를 사용하는 것인지 명시한다.

1.1.3. HEAD

  • .git/HEAD 경로에 해당 파일이 존재한다.

  • 실제 cat 명령어를 통해서 HEAD 파일을 열어보면, ref: refs/heads/[사용하는 브랜치명] 한줄이 들어가 있다.

    • 내가 현재 사용하고 있는 브랜치를 의미한다.

    • git checkout [이동하고 싶은 브랜치명] 으로 브랜치를 변경하면 HEAD 파일 내용이 변경된다.

1.2 reset 을 하게 되어 자식 커밋의 값이 날라가는가?

  • 결론부터 말하면 아니다!

  • reset 을 한다는 것은 특정 시점으로 프로젝트 세팅을 변경한다는 것이지, 디비(.git) 내 값을 수정한다는 의미는 아니다!

    • insert, select 만 가능하다.

    • update, delete 는 불가하다!

  • 때문에, reset 을 실수하더라도 언제든 돌아갈 수 있다.

    • .git/logs/HEAD 파일을 열어보면, 커밋 해시값을 기록하고 있다.

    • 해당 로그를 확인해 실수한 reset 이전 커밋 해시값을 확인 후 돌아갈 수 있다.

    • git reflog 명령어를 통해서 로그 파일을 열지 않고도 내용을 확인할 수 있다.


2. branch, HEAD, log 살펴보기

Last updated