본문 바로가기
CI.CD/GIT

[GIT] 과거 시점으로 되돌리기 (Reset & Revert)

반응형

이번 포스팅에서는 [실전 활용 및 고급 기술] 파트의 세부 주제인 과거 시점으로 되돌리기 (Reset & Revert)에 대하여 상세히 알아보겠습니다.

1. 과거의 커밋 자체를 지우고 돌아가기 (Reset)

reset은 특정 커밋 시점으로 완전히 시계를 돌려버리며, 그 이후의 미래 커밋 내역을 히스토리에서 삭제합니다. 돌아가는 방식에 따라 3가지 모드가 있습니다.

  • --soft: 지정한 커밋으로 돌아가지만 수정한 코드는 보존되며 '준비 영역(Staged)'에 그대로 둡니다. (주로 커밋 메시지 재작성에 쓰임)
  • --mixed: (기본값) 코드는 보존되지만 '준비 영역'에서 내려온 상태(Unstaged)로 둡니다.
  • --hard: 시점 이후의 코드 수정 사항마저 모조리 파기하고 완벽히 과거로 회귀합니다. (매우 주의해서 사용)
# 현재 커밋 기준 2개 전 커밋으로 완전 되돌리기
$ git reset --hard HEAD~2

2. 이력을 유지하며 취소하기 (Revert)

revert는 과거를 없애는 것이 아니라, 취소하고 싶은 커밋의 코드 변경 사항과 정반대되는 "상쇄 커밋"을 새롭게 추가하는 안전한 방식입니다.

# a1b2c3d 커밋의 내용을 취소하는 신규 커밋 생성
$ git revert a1b2c3d

협업 시 필수 원칙: 자신의 로컬 환경에서 방금 한 커밋을 되돌릴 때는 Reset을 써도 무방하지만, 이미 원격 저장소에 Push 한 커밋을 취소할 때는 반드시 Revert를 사용해야 합니다. 원격에 올라간 커밋을 강제로 지우면 동료들의 저장소 동기화가 완전히 파괴됩니다.


지금까지 과거 시점으로 되돌리기 (Reset & Revert)의 개념과 구체적인 활용 방안에 대해 살펴보았습니다. 이어지는 다음 포스팅에서 관련 심화 주제를 지속적으로 다루어보겠습니다.

반응형