쓸데없는 파일 빼고, 과거로 돌아가기
.gitignore 파일을 사용해 불필요한 파일을 추적에서 제외하고, 코드가 망가졌을 때 과거의 안전한 상태로 되돌리는 방법을 알아봅니다.
우리는 앞서 `git add .` 명령어로 변경된 모든 파일을 상자에 쓸어 담아 커밋하는 편리함을 배웠습니다. 하지만 프로젝트 폴더 안에는 데이터베이스 비밀번호가 적힌 파일이나, 용량이 1기가가 넘는 로그 파일처럼 절대 Git 저장소에 백업해서는 안 되는 것들이 섞여 있습니다. 이번 시간에는 이런 위험한 파일들을 Git이 아예 쳐다보지도 못하게 투명 망토를 씌우는 `.gitignore` 설정법을 배웁니다. 또한 바이브코딩 중에 코드가 처참하게 망가졌을 때, 우리가 애써 만들어둔 과거의 세이브 포인트로 무사히 타임머신을 타고 돌아가는 방법도 알아보겠습니다.
눈감아줘 Git: `.gitignore` 파일의 마법
프로젝트 폴더에서 `git status`를 쳐보면, 수많은 자동 생성 폴더(예: `node_modules`, `__pycache__`)나 임시 파일들이 줄줄이 화면을 채우는 것을 볼 수 있습니다. 이 파일들은 용량만 크고, 코드를 실행할 때 컴퓨터가 임시로 만들어낸 껍데기일 뿐 코드 원본이 아닙니다. 이 파일들까지 몽땅 `git add .`로 커밋해 버리면 Git 창고의 용량이 금방 터져버리고, 코드를 올리거나 내려받을 때 시간이 엄청나게 오래 걸리게 됩니다.
더 치명적인 것은, 웹 서버 접속 아이디나 결제 API 비밀번호가 담긴 `.env` 파일 같은 민감한 정보가 나중에 깃허브(GitHub) 같은 외부 원격 저장소에 업로드되어 전 세계 해커들에게 노출되는 보안 사고입니다.
이런 대참사를 막기 위해 `.gitignore`라는 특수한 설정 파일을 만듭니다. 이름 그대로 'Git아, 이 파일들은 무시(Ignore)해 줘'라고 지시하는 장부입니다.
.gitignore 작성 방법
프로젝트 폴더의 가장 최상위에 `.gitignore`라는 이름의 텍스트 파일을 만들고, 무시하고 싶은 파일이나 폴더 이름을 한 줄에 하나씩 적기만 하면 됩니다.
# node_modules 폴더 전체를 무시합니다.
node_modules/
# 로그 파일을 모두 무시합니다.
*.log
# 비밀번호가 담긴 환경 변수 파일은 무조건 무시합니다.
.env이렇게 적어두고 저장하면, 이후부터는 아무리 내용이 바뀌어도 `git status`에 나타나지 않으며 `git add .`를 쳐도 택배 상자에 포장되지 않는 투명 파일이 됩니다.
타임머신 탑승 준비: 과거로 되돌아가기
AI가 짜준 코드를 실행해 봤더니 서버가 다운되었습니다. 1시간 전까지만 해도 멀쩡했는데 말이죠. 하지만 걱정하지 마세요. 우리에겐 촘촘하게 남겨둔 든든한 세이브 포인트(커밋)들이 있습니다. 이제 과거로 돌아갈 차례입니다.
Git에서 과거로 되돌아가는 방법은 크게 두 가지 철학으로 나뉩니다.
- "가장 최근의 실수들을 아예 역사에서 지워버리고(삭제), 과거의 특정 시점으로 완전히 돌아가자" (`git reset`)
- "내가 실수했다는 역사적 사실은 그대로 둔 채, 과거의 내용만 복사해 와서 새로운 버전인 척 다시 덮어쓰자" (`git revert`)
초보자에게는 역사를 완전히 지워버리는 `reset`은 다소 위험할 수 있습니다. 꼬여버린 역사를 풀지 못해 더 큰 구렁텅이에 빠지기도 합니다. 따라서 여기서는 당장 직전에 한 커밋(가장 최신 작업)을 안전하게 취소하고 원래대로 되돌리는 개념에 집중해 보겠습니다.
가장 쉬운 탈출 버튼: `git restore`
가끔은 아직 커밋을 하기 전, `git add`조차 하지 않은 상태에서 코드가 망가진 것을 깨달을 때가 있습니다. "아, 아까 `git commit`을 완료했던 가장 깨끗했던 그 상태로 그냥 내 책상(작업 공간) 위 파일들을 싹 원상 복구해 줘"라고 명령할 때는 `git restore`를 사용합니다.
실수를 되돌리는 대표적인 명령어들
| 명령어 | 상황 및 수행 결과 |
|---|---|
| git restore index.html | 아직 커밋하지 않은 index.html 파일의 변경 사항을 모두 취소하고, 마지막으로 커밋했던 깔끔한 원본 상태로 덮어씌워 줍니다. (Ctrl+Z의 궁극기) |
| git restore . | 단일 파일이 아니라, 내 책상 위에서 지금 수정 중이던 모든 파일의 변경 사항을 한 방에 다 날려버리고 최근 커밋 상태로 초기화합니다. |
| git revert HEAD | 이미 커밋을 해버렸는데 그 커밋이 잘못된 것일 때, 그 최신 커밋(HEAD)이 했던 행동을 '정확히 반대로 수행하는' 새로운 커밋을 만들어 안전하게 수정을 취소합니다. |
바이브코딩의 흐름에서 가장 자주 쓰이는 패턴은 이것입니다:
- 정상 코드에서 새 브랜치 생성 (다음 시간에 배웁니다)
- AI가 준 코드 붙여넣고 저장
- 테스트 실패! 에러 뿜뿜!
- `git restore .`를 과감하게 쳐서 망가진 코드를 싹 날려버림.
- 깨끗해진 파일로 돌아가서 AI에게 코드를 다시 짜오라고 명령함.
이처럼 `restore` 명령어만 알고 있어도 코드를 망쳤다는 스트레스에서 99% 해방될 수 있습니다.
안전한 되돌리기를 위한 골든 룰
- 1git restore . 명령어는 아직 세이브되지 않은 내 현재 노력을 가차 없이 덮어써 버리므로, 정말로 이 변경 사항들이 전부 다 필요 없는 쓰레기인지 심호흡하고 한 번 더 확인합니다.
- 2중요한 설정이나 비밀번호를 숨기기 위한 .gitignore 파일 그 자체는 Git에 커밋하여 소중하게 관리해야 합니다.
- 3과거로 돌아가기 위해서는 그 과거가 존재해야 합니다. 즉, 평소에 에러 없는 깨끗한 상태일 때 git commit을 자주 해두는 습관만이 살길입니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.프로젝트의 덩치가 너무 커지는 것을 막고 해킹 사고를 예방하기 위해, 데이터베이스 비밀번호가 담긴 파일(.env)을 Git이 영원히 추적하지 않도록 '투명 망토'를 씌우려 합니다. 이 투명 망토 역할을 하는 설정 파일의 이름은 무엇인가요?
3줄 요약
- 1.gitignore 파일 안에 용량이 큰 임시 폴더나 비밀번호 파일의 이름을 적어두면, git add . 명령어를 쳐도 그 파일들은 무대에 올라가지 않고 안전하게 무시됩니다.
- 2아직 커밋하지 않은 상태에서 코드를 망쳤다면, git restore . 명령어를 사용하여 수정 중이던 파일들을 마지막으로 세이브된 깨끗한 상태로 덮어씌워 롤백할 수 있습니다.
- 3과거로 원활하게 되돌아가는 타임머신 기술이 힘을 발휘하려면, 평소 에러가 없는 정상 상태일 때 잘게 쪼개어 커밋을 남겨두는 꼼꼼한 세이브 습관이 선행되어야 합니다.