모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

15강 / 전체 15강

되돌리기 전략

7분 읽기 조회 0

git revert로 안전하게 특정 커밋 취소, git reset의 soft·mixed·hard 3가지 모드와 사용 기준, git stash로 변경 사항 임시 보관, 히스토리 재작성이 위험한 이유, 상황별 올바른 되돌리기 방법을 완전히 익힙니다.

🎯 학습 목표

이 강을 마치면 다음을 할 수 있습니다.

  • git revert로 특정 커밋을 안전하게 되돌릴 수 있습니다.
  • git reset의 soft, mixed, hard 세 가지 모드의 차이를 이해하고 상황에 맞게 선택할 수 있습니다.
  • git stash로 작업 중인 변경 사항을 임시 저장하고 복원할 수 있습니다.
  • 공유 브랜치에서 히스토리 재작성이 위험한 이유를 설명할 수 있습니다.

⚠️ 되돌리기 전 반드시 알아야 할 원칙

이 섹션에서는 Git의 되돌리기 명령을 사용하기 전에 반드시 이해해야 할 핵심 원칙을 살펴보겠습니다.

Git에서 "되돌리기"는 크게 두 가지 방향입니다. 하나는 안전한 되돌리기: 히스토리를 보존하면서 새 커밋으로 취소. 다른 하나는 히스토리 재작성: 과거 커밋 자체를 수정·삭제. 히스토리 재작성은 로컬 전용 브랜치에서만 안전합니다.

절대 규칙: 이미 원격 저장소에 push하고 팀원이 공유 중인 커밋은 히스토리를 재작성하지 마세요. 팀원의 저장소와 히스토리가 충돌해 심각한 문제가 생깁니다.

상황권장 방법히스토리
공유된 커밋 취소git revert보존 (새 취소 커밋 추가)
로컬 커밋 수정·취소git reset재작성 (조심)
작업 중 임시 저장git stash보존 (스택에 임시 보관)

↩️ git revert — 안전한 커밋 취소

이 섹션에서는 팀 히스토리를 보존하면서 특정 커밋의 변경 사항을 없애는 가장 안전한 방법 git revert를 살펴보겠습니다.

git revert는 특정 커밋의 변경 사항을 "반대로" 적용하는 새 커밋을 만듭니다. 기존 히스토리를 그대로 두고 "이 커밋을 취소했다"는 새 기록을 추가합니다. 공유된 브랜치에서 가장 권장하는 방법입니다.

# 특정 커밋 취소 (커밋 해시로 지정)
git revert a1b2c3d

# 에디터가 열리며 기본 메시지: "Revert 'feat: 로그인 기능 추가'"
# 저장·종료하면 취소 커밋 생성

# 에디터 없이 기본 메시지로 바로 생성
git revert a1b2c3d --no-edit

# 최근 1개 커밋 취소
git revert HEAD

# 최근 3개 커밋 취소 (역순으로 각각 revert)
git revert HEAD~2..HEAD

# 출력 예시:
# [main c3d4e5f] Revert "feat: 로그인 기능 추가"
#  1 file changed, 50 deletions(-)
#  delete mode 100644 login.html

revert 후 git log를 보면 원래 커밋과 취소 커밋이 모두 히스토리에 남아있습니다. 이것이 안전한 이유입니다. 팀원은 무슨 일이 있었는지 모두 추적할 수 있습니다.

🔄 git reset — 커밋 히스토리 재작성

이 섹션에서는 HEAD 포인터를 과거 커밋으로 되돌리는 git reset의 세 가지 모드와 각각의 사용 기준을 살펴보겠습니다.

git reset은 HEAD를 과거 커밋으로 이동시킵니다. 세 가지 모드가 있으며 파일과 스테이징 영역에 영향을 주는 범위가 다릅니다.

# 모드 1: --soft — 커밋만 취소, 변경 사항은 스테이징 영역에 유지
git reset --soft HEAD~1
# 결과: 마지막 커밋이 취소되고 변경 내용은 스테이징에 그대로
# 용도: 커밋 메시지를 수정하거나 커밋을 합치고 싶을 때

# 모드 2: --mixed (기본값) — 커밋 + 스테이징 취소, 파일 내용은 유지
git reset HEAD~1
git reset --mixed HEAD~1  # 같음
# 결과: 마지막 커밋이 취소되고 변경 내용은 작업 디렉터리에 (unstaged)
# 용도: 커밋을 취소하고 파일을 다시 검토·수정하고 싶을 때

# 모드 3: --hard — 커밋 + 스테이징 + 파일 내용 모두 취소 (⚠️ 위험)
git reset --hard HEAD~1
# 결과: 마지막 커밋이 취소되고 파일 내용도 이전 커밋 상태로 복원
# 용도: 최근 커밋을 완전히 없애고 싶을 때 (복구 불가!)

# 특정 커밋으로 리셋
git reset --hard a1b2c3d

세 모드의 차이를 정리하면 다음과 같습니다.

모드커밋 히스토리스테이징 영역작업 디렉터리
--soft변경됨유지됨유지됨
--mixed변경됨초기화됨유지됨
--hard변경됨초기화됨초기화됨

⚠️ 경고: --hard 리셋으로 사라진 커밋은 git reflog로 복구할 수 있는 경우도 있지만, 일반적으로 복구가 매우 어렵습니다. 신중하게 사용하세요. 절대로 push된 공유 커밋에는 reset을 사용하지 마세요.

📦 git stash — 변경 사항 임시 저장

이 섹션에서는 작업 도중 다른 브랜치로 급하게 이동해야 할 때 변경 사항을 임시 보관하는 git stash를 살펴보겠습니다.

기능 개발 중에 긴급 버그 수정 요청이 오면 어떻게 해야 할까요? 아직 완성되지 않아 커밋하기 어려운 상태라면 git stash로 임시 저장합니다.

# 변경 사항을 stash에 저장 (작업 디렉터리와 스테이징 영역 초기화)
git stash
git stash push -m "로그인 페이지 작업 중"  # 메시지와 함께 저장

# stash 목록 확인
git stash list
# stash@{0}: On feature/login: 로그인 페이지 작업 중
# stash@{1}: WIP on main: a1b2c3d 이전 커밋 메시지

# 다른 브랜치로 이동해 작업
git switch main
git switch -c hotfix/payment-error
# ... 긴급 수정 후 커밋·병합 ...

# 원래 브랜치로 돌아와 stash 복원
git switch feature/login
git stash pop             # 가장 최근 stash 복원 후 목록에서 제거
git stash apply           # 복원하되 목록에 유지 (여러 곳에 적용 가능)

# 특정 stash 적용
git stash pop stash@{1}

# stash 삭제
git stash drop stash@{0}  # 특정 stash 삭제
git stash clear           # 모든 stash 삭제

🔍 git reflog — 최후의 복구 수단

이 섹션에서는 reset이나 실수로 사라진 커밋을 찾아 복구하는 마지막 수단 git reflog를 살펴보겠습니다.

git reflog는 HEAD가 이동한 모든 기록을 보여줍니다. reset, switch, merge 등 HEAD 위치가 바뀔 때마다 기록됩니다. reset --hard 후에도 reflog에 이전 커밋이 남아 있어 복구가 가능합니다.

# reflog 확인
git reflog
# a1b2c3d (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1
# d4e5f6g HEAD@{1}: commit: feat: 실수로 지운 기능
# c3d4e5f HEAD@{2}: commit: 이전 커밋

# HEAD@{1}의 커밋 해시 d4e5f6g를 복구
git reset --hard d4e5f6g
# 또는 새 브랜치로 복구
git switch -c 복구브랜치 d4e5f6g

reflog는 로컬에서만 기록되며 보통 90일간 보관됩니다. 원격 저장소에서 삭제된 브랜치는 reflog로 복구할 수 없으므로 중요한 변경은 항상 push해 두는 것이 최선의 예방책입니다.

📝 핵심 요약

15강에서 배운 내용을 정리해 보겠습니다.

# 상황별 되돌리기 명령어

# 공유된 커밋을 취소해야 할 때 (안전)
git revert 커밋해시

# 로컬 최근 커밋만 취소, 파일 유지
git reset --soft HEAD~1   # 스테이징에 유지
git reset HEAD~1          # unstaged로 유지
git reset --hard HEAD~1   # ⚠️ 파일도 초기화

# 작업 중 다른 브랜치로 급하게 이동
git stash
git stash pop  # 복귀 후 복원

# 실수로 지운 커밋 찾기
git reflog

가장 중요한 원칙: push된 커밋은 reset 하지 말고 revert 하라. revert는 히스토리를 보존하므로 팀에 안전합니다.

다음 강인 16강 — README와 문서화에서는 저장소 첫인상을 결정하는 README.md 작성법, 마크다운 문법, 그리고 오픈소스 저장소를 완성도 있게 만드는 CONTRIBUTING.md, CHANGELOG 같은 부가 문서를 배웁니다!

관련 주제

  • git revert
  • git reset soft mixed hard
  • git stash
  • 히스토리 재작성 위험
  • 공유 브랜치 주의
  • 개발·프로그래밍
  • 개발·프로그래밍 강의
  • 깃허브 사용법 18강 — Git & GitHub 협업
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

깃허브 사용법 18강 — Git & GitHub 협업

이 강의가 속한 시리즈는 총 15강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...