Git에서 commit을 가리킬 때 Absolute reference와 Relative reference, Reflog Reference 의 세가지 방식이 있음.
- Absolute reference: commit id를 사용함.
- Relative reference: tilde(
~)와 caret(^) - Reflog reference: at(
@) 을 사용함.
SHA1 으로 작성된 commit id로 지정하는게 가장 확실하지만,
현재 HEAD로부터 이전 몇 단계를 되돌리는 등의 task에선 Relative reference가 보다 편리함.
Reflog Reference는 reset등으로 사고(?) 발생시 없어진 commit을 찾기 위한 방법.
이 문서는 Relatrive Reference와 Reflog Reference 간략히 다룸.

~ (Tilde): Ancestor Reference
~ (Tilde)는 int와 함께 쓰여져서 "몇 번째 조상"에 해당하는 commit을 가리킴.
- 주의할 점은 항상 첫번째 parent (merge 가 수행될 때의 branch의 parent를 첫번째 parent라고 부름)을 따라 올라감.
- 조선 시대의 족보로 생각하면... 친가쪽을 애기한다고 보면 됨.
- linear history에서 주로 이용됨.
^ (Caret): Parent Reference
^ (Caret)도 int와 함께 쓰여지지만, "몇 번째 부모"에 해당하는 commit을 가리킴.
HEAD^또는HEAD^1은HEAD~1과 같이 첫번째 부모를 가리킴.- 일반적으로 merge가 일어난 commit 등을 제외하면 parent commit은 1개인 점을 주의할 것.
- merge결과로 만들어진 commit (=merge commit)의 경우는 부모가 2개임:
^이 필요한 부분임. HEAD^2는 merge 명령어에서 인자로 넘겨진 브랜치에 존재하는 직전 commit을 가리킴.- merge가 이루어진 history에서 주로 이용됨.
Example for Relative Reference
다음 그림은 ATLASSIAN의 git 튜토리얼에서 가져온 그림으로 이를 이해하는 것이 목적임.

A commit을 기준으로 기재된 것으로 Ancstor와 Parent의 차이를 쉽게 이해할 수 있음.
@ (at)의 사용법
크게 보면 Relative Reference 이지만,
이는 HEAD의 과거 이력을 나타내는 Reflog를 이용하는 Reflog Reference 라고 명칭하는게 보다 정확함.
이름 그대로 Reflog (=Reference Log)를 참조하는 방식으로 HEAD와 같은 참조가 과거에 가리키던 commit의 이력을 이용함.
결국 개발자가 최근에 한 작업 HEAD의 순서대로 commit을 찾아감.
@{0}또는 그냥@: HEAD가 현재 가리키는 위치 (즉, HEAD와 동일).@{1}: HEAD가 한 단계 전에 있었던 위치.@{n}: HEAD가 n 단계 전에 있었던 위치.main@{yesterday}: main 브랜치가 어제 가리켰던 커밋. (시간 기반 참조도 가능)
Reflog의 강점은 git reset으로 branch에서 제거된 commit도 가리킬 수 있다는 점임.
다음 example을 참고할 것.
Example for Reflog Reference
- commit을 수행. (commit 이후,
HEAD의 commit id는 A 라고 가정) - 실수로
git reset --hard HEAD~1을 실행. (HEAD는 A의 부모로 이동) - A는 branch에서 사라지게 됨. 하지만 Reflog에는 남아있음.
git reflog를 보면HEAD@{1}이 A를 가리킴을 확인 가능.git reset --hard @{1}명령을 사용하면 A를 복구 가능.- reset은 공동작업에선 쓰기 어려운 경우가 많음: branch를 되돌리기 때문에 다른 개발자들의 기록과 충돌나기 쉬움.
- 개인적으로
git switch -c recovered_branch @{1}을 선호함.
같이 보면 좋은 자료들
https://www.atlassian.com/ko/git/tutorials/refs-and-the-reflog
Git Refs: 알아야 할 사항 | Atlassian Git Tutorial
git ref는 커밋을 간접적으로 참조하는 방식이며 커밋 해시에 대한 사용자 친화적인 별칭입니다. Git의 reflog를 사용하여 겉보기에 “손실된” 커밋을 되살려보겠습니다.
www.atlassian.com
Git 파일 관리
Git 명령어 정리파일 관리git add : 변경된 파일 하나만 Staging Area로 추가합니다.git add .: 모든 파일 변경 사항을 한번에 Staging Area로 추가합니다.git add -p: 파일을 세부적으로 hunk 단위로 나눠서 Staging
lukeit.tistory.com
'utils > git and github' 카테고리의 다른 글
| git init --bare : 편집가능한 소스 코드가 없는 (서버용) 저장소 만들기 (0) | 2025.12.01 |
|---|---|
| git difftool 과 git mergetool (1) | 2025.07.22 |
| SSH Agent 사용법 (2) | 2025.07.21 |
| 새로 remote 에 추가된 submodule 을 local 에 반영하기 (3) | 2025.07.11 |
| [git] How to Add a New Remote Branch to Your Local Repository (0) | 2024.12.26 |