본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

reflog와 clean: 비상 도구

~22 min · reflog, clean, recovery

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Reflog와 clean은 비상시에 꺼내는 도구야

날마다 쓸 일은 없어야 하지만 필요한 날에는 정확히 알아야 하는 명령이 둘 있어. git reflog는 commit, reset, rebase, switch를 포함해 HEAD가 움직인 자리를 기본 90일 동안 기억하는 로컬 기록이야. 잃었다고 생각한 작업을 찾는 데 써. git clean은 작업 트리의 untracked file을 없애. 둘 다 로컬에만 작용하고, 부주의하면 재앙을 만들지만 신중하게 쓰면 재앙을 수습해.

흔한 상황은 이래. git reset --hard 뒤 하루치 작업을 잃었다고 느껴. 이때 더 움직이지 말고 git reflog부터 실행해. 최근 HEAD 이동이 번호와 함께 나타나며 HEAD@{0}은 현재, HEAD@{1}은 바로 전 자리야. 잃은 commit이 있는 entry를 찾아 git switch -c rescue HEAD@{3}로 branch를 만들거나 git reset --hard HEAD@{3}로 돌아갈 수 있어.

Reflog는 HEAD뿐 아니라 ref마다 따로 있어. git reflog show feature/x는 그 branch의 이동을 추적하고, git reflog --date=relative는 '몇 시간 전' 같은 상대 시간을 보여줘. 기본 90일은 설정할 수 있지만 보통 충분해. entry가 만료되면 해당 commit이 GC 대상이 되어 복구할 수 없게 될 수 있어.

git clean은 untracked file을 삭제해. 기본으로는 아무것도 하지 않고 -n(dry run)이나 -f(force)가 필요해. directory용 -d, ignored file까지 포함하는 -x를 조합하면 작업 트리를 git ls-files에 맞는 상태로 쓸어낼 수 있어. 반드시 git clean -ndx로 삭제 대상을 먼저 읽어. git clean -fdx는 그 목록을 확인하고 정말 원할 때만 실행해. Git이 추적하지 않은 파일에는 Git 쪽 복구 수단이 없어.

Code

Reflog 로 잃은 작업 찾기·bash
# 헷갈린 reset, rebase, branch 삭제 후:
git reflog --date=relative -n 30

# 출력 예:
# abc1234 HEAD@{0} 5 minutes ago: reset: moving to HEAD~3
# def5678 HEAD@{1} 1 hour ago:    commit: feature/x final
# 12345ab HEAD@{2} 2 hours ago:   pull: Fast-forward

# 잃은 tip 을 rescue branch 로 복원:
git switch -c rescue HEAD@{1}
# 또는 현재 branch 되돌리기:
git reset --hard HEAD@{1}

# Branch 별 reflog:
git reflog show feature/x
Clean — 항상 dry-run 먼저·bash
# DRY RUN — 뭐가 삭제될지 list:
git clean -nd                  # untracked 파일 + 디렉토리
git clean -ndx                 # ignored 파일 (build 산출물) 까지 포함

# 실제 삭제 (dry run 검토 후):
git clean -fd                  # untracked 파일 + 디렉토리 삭제
git clean -fdx                 # ignored 파일도 삭제

# Interactive — 뭐 삭제할지 선택:
git clean -i

# 위험 — build output, .env, Git 이 추적 안 한 모든 거
# 날아갈 수 있어. Git 쪽 undo 없음.

External links

Exercise

복구할 수 있는 재앙을 만들어. commit 하나를 만든 뒤 git reset --hard HEAD~1로 버리고 git reflog에서 잃은 commit을 찾아 git switch -c rescue HEAD@{1}로 새 branch에 복원해. git log로 확인해. 별도로 빌드 결과물이 있는 repo에서 git clean -ndx를 실행해 목록을 읽고, 이 repo에서 실제 삭제 명령을 실행할지 결정한 뒤 이유를 적어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.