[git] reset 종류별 차이 (soft, mixed, hard)

2025. 8. 1. 11:02·프로그래밍 언어/04. TIL

❓가정

# 기본계산기
def add(a, b):
  return a+b

def subtract(a, b):
  return a-b

def multiply(a, b):
  return a*b

###### 추가된 부분 #######
def divide(a, b):
  if b == 0:
    raise ValueError("Cannot divide by zero")
  return a / b

 

calculator.py 파일에 나누기 함수를 추가하고 git add . 를 통해 변경 사항이 staging area 에 추가된 상황

1️⃣ git reset --soft

요약 : working directory, staging area 그대로, 커밋 기록만 변경됨

 

1. log를 통해 현재 어떻게 변화되고 있는지 확인

여기서 divide 기능을 추가한 b337e5b 커밋을 가리키는 HEAD를 32f2로 변경하기 위해 git reset --soft 를 실행

 

2. git reset --soft 32f2 로 HEAD가 이전 커밋을 가리킴

  •  파일 상태 : calculator.py 파일은 그대로 유지(divide가 추가된 상태)
  • staging area : divide 함수가 포함된 변경 사항은 여전히 staged 상태로 남아있음
  • HEAD : 이전 커밋(32f2)를 가리키고 있다. 즉, b3372의 커밋은 기록에서 제거되었지만, 변경사항은 staging area에 남아있음

git status를 확인해도 calculator.py과 staging area에 존재함
cat calculator.py를 통해 파일을 확인해도 divide가 추가된 상태

2️⃣ git reset --mixed

요약 : staging area 에 존재하는 변경된 사항이 staging area에서 제외됨, working directory는 변경사항 그대로

 

1. git reset --miexed f11d

git reset --mixed 를 통해 2개의 파일이 staging area에서 unstage 상태

git reset --mixed 명령어는 staging area를 비운다. 따라서 README.md 파일과 caculator.py 의 변경 사항은 더 이상 staging area 에 포함되지 않고, unstaged 상태로 이동되었다.

 

2. HEAD 방향

head 는 f11d 를 가리키고 있음

 

3. working directory는 그대로

추가했던 divide 함수는 reset --mixed 를 해도 그대로 남아있다.

 

4. Branch 상태

git reset으로 커밋 기록을 되돌렸기 때문에 원격 브랜치(origin/main)보다 3개 커밋 뒤쳐진 상태

 

3️⃣ git reset --hard

요약 : working directory, staging area, repository 전부 다 이전 상태로 되돌림

 

1. git reset --hard 0148

현재 HEAD는 f11d를 가리키고 있고, 여기서 git reset --hard 0148 을 통해 Create README.md 커밋으로 이동해보자

 

명령이 잘 실행되었고, HEAD는 현재 0148을 가리킨다고 나온다. 이제 파일들이 어떻게 변화되었는지 살펴보면

 

2. git log --oneline

레퍼지토리를 확인해보면 0148을 가리키고 있다.

 

3. cat calculator.py

working directory를 살펴보면 divide 함수를 추가해주기 전으로 돌아간거를 확인할 수 있다.

 

4. git status

staging area를 살펴보면 커밋할 내용이 전혀 없다고 나온다..

 

즉, hard reset은 working directory 부터 staging area까지 전부 이전 상태로 돌리기 때문에

사용에 있어서 주의가 필요한 명령어다.

 

4️⃣ 최종 요약

staging area가 이전 상태로 변경되는건 크게 문제되지 않는다. 왜냐하면 git add . 를 통해 다시 working directory의 내용을 기반으로 최신 상태로 만들어 주면 되기 때문이다.

 

하지만 hard reset을 통해 working directory마저 초기화시키면 커밋 이전으로 날려버리기 때문에 주의하면서 사용하자.

 

'프로그래밍 언어 > 04. TIL' 카테고리의 다른 글

[Linux] 리눅스 우분투 명령어 정리하기  (0) 2026.03.25
[데이터 분석] 01. 지표 관리하기(AARRR, FUNNEL)  (1) 2025.07.29
[git] 깃 기초 내용 정리  (1) 2025.07.22
'프로그래밍 언어/04. TIL' 카테고리의 다른 글
  • [Linux] 리눅스 우분투 명령어 정리하기
  • [데이터 분석] 01. 지표 관리하기(AARRR, FUNNEL)
  • [git] 깃 기초 내용 정리
dalleeoppaa
dalleeoppaa
DA, GIS 공부 기록
  • dalleeoppaa
    달래오빠
    dalleeoppaa
  • 전체
    오늘
    어제
    • 분류 전체보기 (111) N
      • GIS (22)
        • 01. GIS TIL (13)
        • 02. OpenSource Geo Data (6)
        • 03.사이드 프로젝트 (1)
      • 프로젝트 (6)
        • 01. 상권분석 지도 (3)
        • 02. olist 고객 RFM 분석 (3)
      • PointCloud (1) N
      • 프로그래밍 언어 (56)
        • 01. Python (1)
        • 02. SQL (49)
        • 03. C++ (2)
        • 04. TIL (4)
      • 데이터분석 (23)
        • 01. Google Cloud Platform (1)
        • 02. GA4 & GTM (1)
        • 03. LookerStudio (4)
        • 04. Apach Spark (7)
        • 05. 데이터 시각화 (10)
      • 인턴 (2)
        • 01. NPL (2)
        • 02. TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    postgresql연습
    데이터분석가
    SQL
    프로그래머스
    태블로부트캠프
    데이터분석
    태블로신병훈련소
    태블로연습
    프로그래머스코테
    GIS
    PostgreSQL
    데이터분석취준
    sql코테
    프로그래머스SQL
    MySQL
    데이터분석가코테
    코딩테스트
    프로그래머스lv3
    spatialdata
    solvesql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dalleeoppaa
[git] reset 종류별 차이 (soft, mixed, hard)
상단으로

티스토리툴바