개발을 진행하다 보면 잘못된 커밋이나 변경 사항을 되돌려야 할 때가 있습니다. 이때 Git에서는 **git revert**와 **git reset**이라는 두 가지 명령어를 사용할 수 있습니다. 하지만 두 명령어의 사용 목적과 동작 방식은 크게 다릅니다. 잘못 사용하면 커밋 히스토리 손상이나 데이터 손실로 이어질 수 있으니 주의해야 합니다.
🔑 핵심 차이점:
- git revert: 안전하게 이전 커밋을 되돌리며 커밋 히스토리를 보존합니다.
- git reset: 커밋 히스토리 자체를 수정하거나 제거할 수 있으며, 잘못 사용 시 데이터 손실 위험이 있습니다.
이 글에서는 git revert와 git reset의 차이, 사용 시기, 실전 예시, 주의사항을 알려드립니다. 🚀
📝 1. Git Revert란?
**git revert**는 지정된 커밋을 취소하는 새로운 커밋을 생성합니다. 원래 커밋 기록을 유지하면서도 변경 사항만 되돌릴 수 있어 협업 시 안전한 방법입니다.
📌 Git Revert 특징
✅ 커밋 히스토리 보존: 과거 커밋을 제거하지 않음
✅ 협업 시 안전: 이미 푸시된 커밋도 안전하게 되돌림
✅ 새로운 커밋 생성: 되돌림 내용이 새로운 커밋으로 기록됨
✅ 충돌 발생 시 해결 가능
📝 기본 사용법
git revert <커밋 해시>
✅ 커밋 해시는 git log로 확인할 수 있습니다.
🧩 예시:
1️⃣ 잘못된 커밋 확인:
git log --oneline
출력 예시:
abc1234 Add broken feature
def5678 Update README
2️⃣ 잘못된 커밋 되돌리기:
git revert abc1234
✅ 결과: "Revert 'Add broken feature'"라는 새로운 커밋 생성.
✅ 언제 사용할까?
✔️ 이미 원격 저장소에 푸시된 커밋을 되돌려야 할 때
✔️ 협업 프로젝트에서 안전하게 되돌림 필요 시
✔️ 커밋 히스토리를 유지하면서 수정할 때
🧨 2. Git Reset이란?
**git reset**은 커밋, 스테이징 영역, 작업 디렉토리를 지정된 상태로 되돌리는 명령어입니다. 옵션에 따라 히스토리를 삭제하거나 스테이징 영역만 초기화할 수 있습니다.
📌 Git Reset 옵션 비교
옵션설명작업 디렉토리 영향스테이징 영향위험도
--soft | HEAD만 이동 | 유지 | 유지 | 낮음 |
--mixed (기본값) | HEAD 이동 + 스테이징 해제 | 유지 | 제거 | 중간 |
--hard | 모든 변경 사항 제거 | 제거 | 제거 | ⚠️ 매우 높음 |
📝 기본 사용법
git reset [옵션] <커밋 해시>
🧩 예시:
1️⃣ 최근 커밋만 취소하고 코드 유지:
git reset --soft HEAD~1
✅ 스테이징된 변경 사항은 그대로 유지됩니다.
2️⃣ 스테이징 해제 및 코드 유지:
git reset --mixed HEAD~1
✅ 코드 변경은 유지되지만 스테이징이 해제됩니다.
3️⃣ 모든 변경 사항 제거 (주의):
git reset --hard HEAD~1
⚠️ 작업 디렉토리와 커밋 모두 삭제되므로 중요한 데이터는 사전에 백업하세요.
✅ 언제 사용할까?
✔️ 로컬에서 최근 커밋을 수정할 때
✔️ 스테이징된 파일을 빠르게 해제할 때
✔️ 잘못된 커밋 히스토리를 정리할 때 (원격 푸시 전)
⚔️ 3. Git Revert vs Git Reset 비교
항목 | git revert | git reset |
사용 목적 | 커밋 취소 및 새로운 커밋 생성 | 커밋 및 작업 디렉토리 되돌림 |
히스토리 영향 | 유지 | 제거 가능 (--hard 사용 시) |
원격 저장소 적용 | 안전 (협업 시 추천) | 위험 (강제 푸시 필요) |
협업 적합성 | 높음 | 낮음 (로컬 전용 추천) |
데이터 손실 위험 | 없음 | ⚠️ 옵션에 따라 높음 |
✅ TIP:
- 협업 프로젝트: git revert 사용 추천
- 개인 로컬 작업: git reset으로 깔끔하게 정리 가능
🚀 4. 실전 예시: 상황별 올바른 사용법
🧩 예시 1: 원격 저장소에 잘못된 커밋 푸시 후 수정
🚫 잘못된 커밋 푸시:
git commit -m "Add broken feature"
git push origin main
✅ 해결 방법:
git revert <커밋 해시> # 안전하게 되돌림
git push origin main
✅ 히스토리를 유지하면서 잘못된 코드 제거.
🧩 예시 2: 로컬에서 최근 커밋 제거 (푸시 전)
잘못된 커밋 제거:
git reset --soft HEAD~1
✅ 스테이징은 유지되어 코드 수정 후 다시 커밋할 수 있습니다.
🧩 예시 3: 실수로 잘못된 파일 추가 해제
git add . # 모든 파일 추가
git reset # 스테이징 해제
✅ 파일은 유지되지만 스테이징이 해제되어 안전하게 재작업 가능.
⚠️ 5. 사용 시 주의사항 및 팁
💡 안전한 사용을 위한 팁
✅ 원격 푸시 후에는 git reset 대신 git revert 사용: 협업 시 필수
✅ --hard 사용 전 코드 백업: 데이터 손실 방지
✅ 잘못된 reset 복구:
git reflog # 이전 커밋 찾기
git reset --hard HEAD@{1} # 이전 상태 복원
✅ 최근 커밋만 수정 필요 시:
git commit --amend # 마지막 커밋 메시지 수정
⚠️ 주의사항
✔️ 공용 브랜치에서는 reset 지양: 히스토리 꼬임 위험
✔️ 협업 시 항상 팀원과 소통 후 실행: 데이터 충돌 방지
✔️ 푸시 전 로컬 테스트 필수: 문제 발생 시 빠른 대응 가능
📝 결론
Git Revert와 Reset은 목적과 사용 시기가 다릅니다.
- 안전한 커밋 되돌리기: git revert 사용 (특히 협업 시)
- 로컬 커밋 정리 및 빠른 수정: git reset 사용 (단, 푸시 전)
- 데이터 손실 방지: 항상 명령어 실행 전 변경사항 백업
✅ 올바른 명령어 선택으로 안전하고 효율적인 코드 관리를 실천하세요! 💻✨
👉 다음 글에서는 "Git Fetch와 Pull의 차이 및 효과적인 사용법"을 다룹니다. 많은 기대 부탁드립니다!
🏷️ 추천 키워드
- Git Revert 사용법
- Git Reset 사용법
- 커밋 되돌리기 방법
- Git Reset vs Revert
- 안전한 코드 복구 팁
- Git 히스토리 관리
- 협업 시 Git 실수 복구
- Git Reflog 활용법
- Git 커밋 히스토리 정리
- 커밋 제거 안전 방법
✅ 지금 바로 Git Revert와 Reset을 실습해 안전한 버전 관리를 시작하세요! 🚀
'[2. 공부] > [2.1 코딩]' 카테고리의 다른 글
🌿 Git Branch 전략과 효율적인 협업 방법 (0) | 2025.03.02 |
---|---|
🔄 Git Fetch와 Pull의 차이 및 효과적인 사용법 (0) | 2025.03.02 |
📂 Git Ignore로 불필요한 파일 관리하기 (1) | 2025.03.01 |
🌳 Git Worktree로 멀티 브랜치 작업 효율적으로 관리하기 (0) | 2025.03.01 |
🗂️ Git Stash로 작업 내용 임시 저장 및 복구 방법 (0) | 2025.03.01 |