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 (강제 아님) |
'Dev' 카테고리의 다른 글
Java 힙 덤프 자동화: jcmd와 쉘 스크립트로 OOM 문제 진단하기 (0) | 2025.06.26 |
---|---|
로컬에서 MSSQL, GitLab, Flyway 환경을 Docker로 구성해서 실습하고 테스트할 수 있는 플래그십 예제 프로젝트 (1) | 2025.06.25 |
윈도우에 Git 설치 - Git 사용(1/5) (0) | 2019.08.26 |