본문 바로가기
Dev

푸시한 커밋을 특정시점으로 안전하게 되돌리기

by 바람냄새 2025. 7. 7.

reset 이 아닌, revert 이용

 

📜 커밋 히스토리 (되돌리기 전)

 
A → B → C (74134fa) → D → E (HEAD)
  • C: 리드미 변경
  • D: 기능 추가
  • E: 버그 수정

🛠️ 실행

bash
git revert D^..E

내부적으로는 revert E → revert D 순서로 실행됩니다.

📜 커밋 히스토리 (되돌린 후)

 
A → B → C → D → E → F (Revert D and E)
  • F 커밋은 D와 E의 변경사항을 되돌리는 커밋입니다.
  • 결과적으로 F 커밋의 파일 상태는 C와 동일합니다.
  • 하지만 D와 E는 히스토리에 남아 있으므로 추적 가능하고, 협업에도 안전합니다.

✅ 요약

항목설명
최종 소스 상태 C와 동일
D, E 커밋 히스토리에 남아 있음
F 커밋 D, E를 되돌리는 커밋
협업 안전성 매우 안전 (강제 푸시 불필요)
커밋 히스토리 투명하게 되돌림 기록이 남음

💡 참고: git diff C F를 해보면 아무 차이도 없을 거예요. 그만큼 F는 C와 동일한 결과를 만들어내는 커밋이라는 뜻이죠.

 

 

 

 

충돌 가능성에 대비한 안전 작업 순서

1. ✅ 현재 브랜치 백업하기

bash
git branch backup-before-revert

혹시 되돌리기 도중 문제가 생기면 이 브랜치로 돌아가면 됩니다.

2. 🔍 되돌릴 커밋의 변경사항 미리 확인하기

bash
git log --oneline
git show D_SHA
git show E_SHA

또는 두 커밋 사이의 변경사항을 한 번에 확인:

bash
git diff D_SHA^ E_SHA

어떤 파일이 바뀌었는지, 충돌 가능성이 있는지 미리 파악할 수 있어요.

3. 🧪 테스트 브랜치에서 먼저 시도해보기 (선택 사항)

bash
git checkout -b test-revert
git revert D_SHA^..E_SHA

여기서 충돌이 발생하면, 본 브랜치에 영향 없이 실험해볼 수 있어요.

4. ⚔️ 충돌 발생 시 해결 방법

  • Git이 충돌한 파일을 표시해줍니다.
  • 충돌된 파일을 열면 이런 식의 마커가 보입니다:
diff
<<<<<<< HEAD
현재 브랜치의 내용
=======
되돌리려는 커밋의 내용
>>>>>>> 커밋 메시지
  • 원하는 상태로 수동 수정한 후:
bash
git add <수정한 파일>
git revert --continue

충돌이 여러 개일 경우, 모두 해결하고 나서 --continue를 실행해야 합니다.

5. 🚀 되돌리기 완료 후 푸시

bash
git push origin 브랜치이름

강제 푸시가 필요 없으므로 협업 중에도 안전하게 반영됩니다.

✅ 정리: 충돌 대비 체크리스트

항목설명
🔄 브랜치 백업 git branch backup-before-revert
🔍 변경사항 미리 보기 git diff, git show
🧪 테스트 브랜치 사용 git checkout -b test-revert
⚔️ 충돌 해결 수동 수정 → git add → git revert --continue
🚀 푸시 git push (강제 아님)