C.W.K.
Stream
Lesson 02 of 05 · published

reset: branch pointer 조심히 움직이기

~24 min · reset, head

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

Reset 은 branch pointer 를 옮기고, mode 가 나머지가 따라갈지 결정

git reset 은 Git 에서 가장 강력하고 가장 오용되는 명령. 핵심 동작은 단순: 현재 branch pointer 를 다른 commit 으로 옮김. 혼란은 index 와 working tree 가 따라갈지 결정하는 세 mode 에서 와. 어떤 의도에 어떤 mode 인지 알면 reset 관련 재앙의 95% 사라져.

--soft 는 branch pointer 만 이동. Working tree, index 그대로. 옛 tip 과 새 target 사이 commit 은 'uncommitted 하지만 staged' — commit 여러 개를 하나로 합치거나 마지막 commit 을 깨끗하게 다시 하는 정확한 상태. --mixed (default) 는 pointer 이동 + index 도 일치하게 reset. Working tree 그대로. Commit 들이 'uncommitted, unstaged' — stage 되는 거 완전 재작업에 유용. --hard 는 pointer 이동 + index reset + working tree 까지 일치하게 덮어써. 영향 받은 파일의 모든 uncommitted 작업 소멸. 강력하고 위험.

네이밍은 아쉽지만 안정적. 한 번 외워: soft = pointer 만, mixed = pointer + index, hard = pointer + index + worktree. 단계마다 파괴 증가. 가장 흔히 유용한 호출: git reset --soft HEAD~1 마지막 commit undo + 변경은 staged 유지해서 amend; git reset HEAD~3 (mixed) 마지막 commit 셋 unstage + 재작업; git reset --hard origin/main branch 를 remote 에 정확히 mirror.

Reset 은 local history 를 rewrite. 그 commit 들이 push 안 됐으면 문제 없음. push 됐고 남이 그 위에 작업했으면 published commit 을 옮긴 거고 force-push gymnastics 가 길. 일반 규칙: reset 은 unpublished history 용. Published history 엔 git revert, 다음 레슨.

Code

세 mode, 세 의도·bash
# 마지막 commit undo + 변경 staged 유지로 amend 준비:
git reset --soft HEAD~1
# 이제 더 나은 메시지로 재 commit 또는 변경 분리.

# 마지막 commit 셋의 변경을 working tree 로 unstage:
git reset HEAD~3                # 암묵적 --mixed

# 파괴적 — branch + index + worktree 다 1 commit rewind:
git reset --hard HEAD~1

# Remote 와 정확히 일치하게 rewind (local extra 손실):
git fetch origin
git reset --hard origin/main
안 좋은 reset 에서 회복·bash
# git reset --hard 한 직후 commit 잃었어?
git reflog                       # reflog 에서 잃은 tip 찾기

# Reflog 는 이런 entry 보여줘:
# abc1234 HEAD@{0} reset: moving to HEAD~3
# def5678 HEAD@{1} commit: feature/x done

# 잃은 tip 을 rescue branch 로 복원:
git switch -c rescue def5678

# 또는 main 자체를 되돌리기:
git reset --hard def5678

External links

Exercise

Scratch branch 에 commit 셋. HEAD~2 에 대해 세 reset mode 시도: soft, mixed (default), hard. 각 시험 사이 git reset --hard ORIG_HEAD 또는 git reflog 로 회복. 각 mode 후 git status 실행 + 뭐가 유지되고 뭐가 폐기됐는지 적어.

Progress

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

댓글 0

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

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