되돌리기와 무시하기
잘못했을 때 상황별로 무엇을 쓰는지 정리합니다. restore · reset · revert 를 구분하는 것이 핵심입니다.
학습 목표
- 아직 하지 않은 변경을 안전하게 버릴 수 있다
- 이미 커밋을 안전하게 되돌릴 수 있다
- 로 산출물과 비밀 파일을 에서 제외한다
되돌리기는 "어디까지 갔는가"에 따라 도구가 다릅니다. 아직 커밋하지 않았다면 git restore, 커밋했지만 아직 에 올리지 않았다면 git reset, 이미 올려서 남들이 받아 갔다면 git revert 입니다. 이 세 가지를 헷갈리면 남의 이력을 망가뜨리게 되므로, 지금 상태가 어디인지 git status 로 먼저 확인하는 습관이 필요합니다.
git reset 은 --soft, --mixed, --hard 세 가지가 있습니다. --soft 는 커밋만 취소하고 변경은 에 남기고, 기본값인 --mixed 는 스테이징에서도 내리고, --hard 는 파일 내용까지 되돌립니다. --hard 는 작업한 내용을 실제로 지웁니다. 실행 전에 반드시 한 번 더 읽으세요. 실수했더라도 git reflog 에 흔적이 남아 있는 경우가 많으니 곧바로 포기하지는 마세요.
빌드 산출물, node_modules, .env 같은 비밀 파일은 저장소에 들어가면 안 됩니다. 프로젝트 루트에 .gitignore 를 두고 패턴을 적으면 이 그 경로들을 아예 보지 않습니다. 주의할 점은 이미 커밋된 파일은 .gitignore 를 추가해도 계속 추적된다는 것입니다. 그때는 git rm --cached 로 추적에서 먼저 뺀 뒤 커밋해야 하고, 비밀번호가 이미 올라갔다면 이력에 남아 있으므로 그 값 자체를 폐기하고 새로 발급해야 합니다.
이 단계에서 익히는 명령어
눈으로 읽지 말고 에 직접 쳐 보세요. 손이 기억해야 실무에서 나옵니다.
git restore <file>- 아직 커밋하지 않은 파일 변경을 버리고 마지막 커밋 상태로 되돌립니다.
git reset --soft HEAD~1- 마지막 커밋을 취소하되 변경 내용은 스테이징에 남깁니다. 메시지를 고칠 때 자주 씁니다.
git revert <commit>- 그 커밋을 취소하는 새 커밋을 만듭니다. 이력을 고치지 않으므로 공유된 에서 안전합니다.
git diff --staged- 스테이징에 올린 내용을 커밋 전에 검토합니다. 커밋 직전 습관으로 들이세요.
스스로 표시하는 칸이에요. 여기서 채점하지는 않아요.
이 단계를 이해한 것으로 표시할까요?
아직 취소할 수 없으니, 정말 이해했을 때만 표시해 주세요.
이해한 것으로 표시했어요
스스로 표시하는 칸이에요. 여기서 채점하지는 않아요.