[2. 공부]/[2.1 코딩]

🔄 Git Revert와 Reset의 차이 및 올바른 사용법

주식경이 2025. 3. 2. 16:23
반응형

개발을 진행하다 보면 잘못된 커밋이나 변경 사항을 되돌려야 할 때가 있습니다. 이때 Git에서는 **git revert**와 **git reset**이라는 두 가지 명령어를 사용할 수 있습니다. 하지만 두 명령어의 사용 목적과 동작 방식은 크게 다릅니다. 잘못 사용하면 커밋 히스토리 손상이나 데이터 손실로 이어질 수 있으니 주의해야 합니다.

🔑 핵심 차이점:

  • git revert: 안전하게 이전 커밋을 되돌리며 커밋 히스토리를 보존합니다.
  • git reset: 커밋 히스토리 자체를 수정하거나 제거할 수 있으며, 잘못 사용 시 데이터 손실 위험이 있습니다.

이 글에서는 git revertgit 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의 차이 및 효과적인 사용법"을 다룹니다. 많은 기대 부탁드립니다!


🏷️ 추천 키워드

  1. Git Revert 사용법
  2. Git Reset 사용법
  3. 커밋 되돌리기 방법
  4. Git Reset vs Revert
  5. 안전한 코드 복구 팁
  6. Git 히스토리 관리
  7. 협업 시 Git 실수 복구
  8. Git Reflog 활용법
  9. Git 커밋 히스토리 정리
  10. 커밋 제거 안전 방법

지금 바로 Git Revert와 Reset을 실습해 안전한 버전 관리를 시작하세요! 🚀

반응형