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