WEBBOOK CHAPTER

현장에서 살아남는 Git: 16장 restore·reset·revert를 상태별로 고른다

16장 restore·reset·revert를 상태별로 고른다

세 명령은 이름이 비슷하지만 대상이 다르다.

상황 보존하려는 것 기본 선택 핵심 효과
staged만 취소 파일 내용 git restore --staged 파일 index를 되돌림
커밋 전 수정 취소 취소 안 함 git restore 파일 작업 폴더를 덮음
로컬 마지막 커밋 취소 파일 내용 git reset --mixed HEAD~1 브랜치와 index 이동
로컬 커밋 취소, staged 유지 staged 내용 git reset --soft HEAD~1 브랜치만 이동
공유된 잘못된 커밋 취소 공유 역사 git revert 커밋 반대 변경의 새 커밋

git reset --hard는 브랜치, index, 작업 폴더를 맞추며 로컬 수정 손실을 일으킬 수 있다. “깨끗하게 만든다”는 이유만으로 쓰지 않는다. git clean -fd는 untracked 파일과 폴더를 삭제하고 Git 역사로 복구하기 어렵다. 필요하다면 먼저 git clean -nd로 삭제 후보만 미리 본다.

merge commit을 revert할 때는 mainline 부모를 정하는 -m이 필요하다. 어느 부모를 기준으로 되돌리는지 그래프에서 확인하지 못했다면 멈추고 리뷰한다.