반응형

Git에서 작업 중 "실수했어요! 이전 상태로 되돌리고 싶어요!" 하는 순간이 꼭 찾아옵니다.
이럴 때 사용하는 대표적인 명령어가 바로 **revert**와 **reset**입니다.
하지만 이 두 명령어는 사용 목적도, 결과도 완전히 다릅니다.
오늘 포스팅에서는 두 명령어의 개념, 차이점, 실제 사용법을 쉽게 정리해드리겠습니다.
✅ 핵심 요약 먼저 보기
| 구분 | git revert | git reset |
| 목적 | 이전 커밋을 무효화하는 새 커밋 생성 | 커밋 자체를 삭제하거나 이동 |
| 안전성 | 안전 (히스토리 유지) | 위험 (히스토리 변경) |
| 협업 시 | ✅ 추천 (이력 유지됨) | ⚠️ 주의 (공유 브랜치에서 사용 시 충돌 가능) |
| 사용 예 | 잘못된 코드 무효화 | 테스트용 커밋 제거, 초기화 등 |
🔁 1. git revert – 이전 커밋을 무효화
git revert [커밋해시]
- 선택한 커밋의 반대 작업을 새 커밋으로 생성
- 기존 커밋 히스토리를 보존하면서 롤백할 수 있음
🔹 예제
git revert a3c2f91
a3c2f91 커밋이 적용한 내용을 반대로 되돌리는 새로운 커밋이 생성됩니다.
✔️ 협업 중이라면 revert 사용이 안전
🔄 2. git reset – 커밋 자체를 이전 상태로 되돌림
git reset --hard [커밋해시]
- 지정한 커밋으로 히스토리를 통째로 초기화
- 변경된 커밋 이후의 히스토리는 사라짐 (주의!)
🔹 reset 종류별 차이
| 명령어 | 설명 |
| --soft | 커밋만 취소 (작업 내용은 유지) |
| --mixed | 커밋 + 스테이징 취소 (기본값) |
| --hard | 커밋 + 스테이징 + 작업파일 모두 삭제 (복구 불가!) |
🔹 예제
git reset --hard HEAD~1
현재 브랜치의 마지막 커밋을 1개 되돌리고, 작업 내용도 삭제합니다.
협업 브랜치에서는 절대 사용 금지!
📌 실무 상황별 추천
| 상황 | 추천 명령어 | 이유 |
| 협업 중 잘못된 커밋 되돌리기 | git revert | 히스토리 보존 가능 |
| 테스트용 커밋 제거 | git reset --soft | 코드 유지하며 커밋만 제거 |
| 전체 초기화 (내 로컬에서만) | git reset --hard | 개발 초기에 빠른 초기화 가능 |
| 실수한 브랜치에서 한 단계 되돌리기 | git reset HEAD~1 | 최근 커밋 취소 가능 |
⚠️ 협업 브랜치에서는 reset 금지!
reset은 내 로컬에서는 유용하지만,
공동 작업 중인 브랜치(main, develop 등) 에서는 사용하면 다른 사람 히스토리까지 꼬일 수 있습니다.
- 공유 브랜치에는 revert 사용
- 로컬 실험 브랜치에서는 reset 사용 가능
반응형
'Git' 카테고리의 다른 글
| Git 고급 명령어 ✅ Rebase, Cherry-pick, Stash (0) | 2025.11.13 |
|---|---|
| GitHub Actions ✅ CI/CD 자동화 배포 워크플로우 만들기 (0) | 2025.11.07 |
| Git ✅ 협업에서 자주 쓰는 rebase, cherry-pick, stash (0) | 2025.10.20 |
| Git 브랜치 전략 완벽 비교! Git Flow vs GitHub Flow 어떤 걸 선택해야 할까? (0) | 2025.10.08 |
| Git 브랜치 전략 – Git Flow vs Trunk Based 차이와 선택 가이드 (0) | 2025.10.01 |