⚙️ Devops/⛏ Git

[Git] Git HEAD, reset 옵션 3가지 (hard, mixed, soft)

2021. 7. 18. 22:46
목차
  1. HEAD 란?
  2. $ git reset --{option} {commit_id}
  3. $ git reflog
  4. git reset 3가지 옵션
  5. git reset은 도대체 언제 사용할까??
반응형


HEAD 란?

현재 내가 위치해있는 커밋을 가리키는 식별자입니다.

보통 커밋을 가리킬 때에는 HEAD가 간접적으로  브랜치를 통해서 가리키게 되는데 아래의 형태가 바로 그 모습입니다.

HEAD가 master 브랜치를 통해 간접적으로 세번째 커밋을 가리키고 있습니다.

 


$ git reset --{option} {commit_id}

HEAD가 가리키는 커밋에 따라 working directory의 형태도 바뀌게 됩니다.

 

한번 첫번째 커밋으로 이동해 보겠습니다. (옵션은 아래에서 설명하겠습니다.)

$ git reset --hard {commit_id}

첫번째 커밋으로 이동했더니 두번째 커밋과 세번째 커밋이 없어졌습니다.

 

자 이제 다시 최신 커밋인 세번째 커밋으로 이동합시다.

어라, $ git log로 세번째 커밋 아이디를 보려했더니 reset 옵션으로 인해 커밋이 보이질 않습니다.

그럴 때 사용하는 명령어가 바로 $ git reflog 입니다.

 


$ git reflog

: HEAD가 가리켰던 Commit 기록을 모두 보여주는 명령어 입니다.

커밋 ID 옆에 보면 HEAD@{N} 라고 있는데 이 N이라는 숫자가 작을수록 최근에 HEAD가 가리켰던 Commit을 의미합니다.

제일 마지막 줄에서 세번째를 보면 " commit: third commit " 이것이 바로 세번째 커밋임을 알 수 있습니다. (Commit id : c45b)

 

$ git reset --hard c45b

자 이제 세번째 커밋으로 이동할 수 있게 되었습니다!

 


git reset 3가지 옵션

  • --soft
  • --mixed
  • --hard

 

만약 우리가 third commit에서 -> first commit으로 이동한다고 가정해보면 3가지 옵션의 차이점은 아래의 그림과 같습니다.

  • --soft : HEAD는 첫번째 커밋을 가리킵니다. 하지만, Staging Area와 Working Directory는 기존의 커밋의 상태로 유지됩니다.
  • --mixed: soft 옵션에서 Staging Area도 함께 첫번째 커밋의 상태로 변경됩니다.
  • --hard: mixed옵션에서 Working Directory가 첫번째 커밋의 상태로 변경됩니다. (위험한 옵션)

 


git reset은 도대체 언제 사용할까??

만약 내가 커밋을 했긴 했는데 commit 2 와 commit 3이 마음에 들지 않는다고 가정해봅시다.

그렇다면 commit 1로 $ git reset {--soft | --mixed} {commit1_id} 명령어를 이용해 이동한 후,

--soft, --mixed 옵션은 working directory는 그대로이기 때문에 다시 코드를 예쁘게 🌈 수정한 후 

  1. $ git add . 
  2. $ git commit -m "commit 4" 순으로 실행해주면?! 

커밋 히스토리가 아래와 같은 형태가 된다!

 

반응형
저작자표시 (새창열림)
  1. HEAD 란?
  2. $ git reset --{option} {commit_id}
  3. $ git reflog
  4. git reset 3가지 옵션
  5. git reset은 도대체 언제 사용할까??
'⚙️ Devops/⛏ Git' 카테고리의 다른 글
  • [Git] Git Merge 이해하기
  • [Git] Git Branch 란?
  • [Git] Git 3가지 영역 (Staging Area) - Commit 이해하기
  • [Git] Git 이란? Git 기본 사용법, 명령어
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (260)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (1)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

최근 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
[Git] Git HEAD, reset 옵션 3가지 (hard, mixed, soft)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.