LeanX

되돌리기: 실수 복구

커밋을 자주 찍어 두면 안전망이 되어, 아직 커밋 안 한 변경은 git restore로, 이미 올린 커밋은 안전한 git revert로 되돌릴 수 있으며, git reset은 이력을 지우는 위험한 명령이므로 개념만 알고 조심해서 씁니다.

Git이 진짜 강력한 순간은 바로 '되돌릴 때'입니다. 앞에서 커밋을 자주 찍으라고 한 이유가 여기 있습니다. 세이브포인트가 촘촘할수록, 사고가 났을 때 돌아갈 안전한 지점이 많아집니다. 이번 레슨에서는 상황별로 안전하게 되돌리는 법을 배웁니다. 겁내지 마세요. 커밋만 해 뒀다면 웬만한 실수는 다 복구됩니다.

상황별 되돌리기 3형제

명령무엇을 되돌리나안전도비유
git restore아직 커밋 안 한 파일 수정을 취소 (마지막 커밋 상태로 복원)안전저장 안 한 문서를 마지막 저장 시점으로 되돌리기
git revert이미 한 커밋의 내용을 '취소하는 새 커밋'을 추가안전 (기록 보존)잘못 보낸 택배를 '반품 처리'로 상쇄 (기록은 남음)
git reset커밋 자체를 없던 일로 되감기 (이력을 지움)위험세이브포인트 몇 개를 통째로 삭제

git restore — 아직 커밋 안 한 실수 취소

파일을 고치다가 엉망이 됐는데 아직 커밋은 안 했다면, git restore로 마지막 커밋 상태로 되돌립니다. '방금 전으로 돌려줘'가 가장 쉬운 경우입니다. 마지막 세이브포인트가 그대로 남아 있으니까요.

커밋 안 한 변경 취소하기

# 특정 파일의 수정을 취소 (마지막 커밋 상태로)
git restore hello.txt

# 모든 파일의 수정을 취소
git restore .

# 실수로 add(상자에 담기)한 것만 빼내기 (수정 내용은 유지)
git restore --staged hello.txt

git revert — 이미 올린 커밋을 안전하게 되돌리기

이미 커밋해서 GitHub에 올린 변경을 되돌려야 한다면 git revert가 정답입니다. revert는 과거를 지우는 게 아니라, '그 변경을 상쇄하는 새 커밋'을 하나 더 얹습니다. 기록이 그대로 남아 안전하고, 팀원과 함께 쓰는 브랜치에서도 문제가 없습니다.

이미 한 커밋 되돌리기

# 되돌릴 커밋의 아이디(해시)를 먼저 확인
git log --oneline

# 그 커밋의 변경을 상쇄하는 새 커밋 만들기
git revert a1b2c3d

# 되돌린 결과를 원격에도 반영
git push

git reset — 강력하지만 위험 (개념만)

git reset은 커밋을 통째로 되감아 없던 일로 만드는 명령입니다. 아직 아무에게도 push하지 않은 '내 컴퓨터 안의 커밋'을 정리할 때는 유용하지만, 이미 공유한 커밋에 쓰면 이력이 어긋나 협업이 꼬입니다. 초보 단계에서는 '이런 게 있다'는 개념만 알고, 실제 되돌리기는 restore와 revert로 하는 것을 권합니다.

무엇을 어떻게 되돌릴지 헷갈릴 때는 우선 git status와 git log --oneline을 보세요. '아직 커밋 전이면 restore, 이미 커밋·push했으면 revert'라는 한 문장만 기억하면 대부분의 상황을 안전하게 넘길 수 있습니다.

git reset --hard와 git push --force(강제 푸시)는 되돌린 내용을 영구히 날리거나 팀원의 작업을 덮어써 버릴 수 있는, Git에서 가장 위험한 명령입니다. 특히 여러 사람이 함께 쓰는 브랜치(main 등)에는 절대 force push하지 마세요. 정말 필요한 상황이 아니라면 이 두 명령은 쓰지 않는 것이 안전합니다.

이제 실수해도 돌아올 안전망이 생겼습니다. 그런데 이 많은 명령어를 다 외워야 할까요? 좋은 소식이 있습니다. 다음 레슨에서는 명령어를 외우는 대신, 클로드 코드에게 말로 시켜서 Git을 다루는 법을 배웁니다.