[Git] git reset & revert 개념알고 적용하기

2024. 5. 25. 14:48·git
목차
  1. 개념
  2. reset
  3. revert
  4. 2. 언제 reset를, 언제 revert를 쓸까?
  5. 3. reset과 revert의 사용
  6. 👇🏻 참고사이트
728x90
반응형

git branch 관련해서 정리하다가 reset까지 오게 되어 정리하면 유용하게 쓰일 것 같아서 정리하고자 한다.

개념

  • reset : 시간을 과거의 특정 사건(commit)으로 되돌린다. 파일의 기록이 없어진다.
  • revert : 현재에 있으면서 과거의 특정 사건(commit)들만 없던 일로 만든다. 기록이 남는다.

→ reset은 아예 현재가 없었던 것 처럼 원하는 과거로 돌아갈 수 있다. 정말 말 그대로 리셋 즉 초기화가 된다. reset은 이력을 남기지 않는다. 따라서 현재까지의 commit 이력을 남기지 않고 원하는 시점으로 완전히 되돌아가고 싶을 때 사용할 수 있다. 또한, 기록이 남지 않아 그에 대한 파일이나, 협업을 하고자 할 때는 피하는 것이 좋다.

revert는 과거로 돌아가겠다는 이력을 남겨두고 원하는 시점으로 돌아간다. 즉, 이전의 commit 내역을 남겨두고 새로운 commit을 생성하면서 과거로 돌아가게 된다.

reset

reset flow
reset flow

git reset --hard a0fvf8

을 하면, 'a0fvf8' commit으로 돌아간다. 그리고 이후 어떻게 됐는지 보면

reset flow
reset flow

위의 그림과 같이 commit 히스토리에 C,D 커밋이 아예 사라진다.

revert

revert flow
revert flow

revert를 이용해 B 커밋으로 돌아가려면

git revert 5lk4er

D 커밋 revert를 하고

git revert 76sdeb

C 커밋 revert를 해줘야 한다. 위와 같이 뒤 커밋부터 순차적으로 revert를 해준다.

revert flow
revert flow

그럼 이렇게 revert한 내용의 커밋 이력을 남기면서 B로 돌아갈 수 있음을 확인할 수 있다!

2. 언제 reset를, 언제 revert를 쓸까?

예를 들어, 협업 중에 내가 이전에 코드로 돌아가 다시 코드를 짜고 커밋을 했을 경우를 생각해볼 수 있다. reset을 해서 커밋할 경우 다른 사람이 pull하고, add과정을 거친다음 commit했을 경우 충돌이 발생할 수 있기 때문이다. 다른 사람의 커밋에는 기존의 코드가 존재하기에 충돌이 일어난다. 만약 혼자 하는 프로젝트라면 git push --force 를 이용해 연결할 수 있다. 강제로 원격과 로컬 저장소의 코드를 일치시키는 것이다.

그렇지만, 같은 branch를 공유하는 협업 프로젝트에서 내가 멋대로 커밋 이력을 삭제해버린다면 다른 사람이 push 할때 충돌이 날 것이다.

따라서, 협업 프로젝트에서 이전의 커밋으로 돌아가고 싶을 땐 revert를 사용하는 것이 좋다. 중요하기에 여러번 서술해놓는다.

3. reset과 revert의 사용

git workflow

git workflow
git workflow

이를 사용하기 위해서는 git의 workflow에 대해서 이해할 필요가 있다. 대표적으로 세가지로 나눌 수 있다. working direcotry , staging area, repository(local repo)으로 나눈다.

  • working directory : 우리가 작업하고 있는 현재 폴더로 수정할 파일들이 있는 곳
    • Working Directory의 모든 파일은 Tracked와 Untracked로 나뉜다.
      • Tracked 파일은 이미 Snapshot에 포함돼 있던 파일이며, Unmodified, Modified, Staged 상태중 하나의 상태를 갖는다.우리가 터미널에서 git status로 상태를 조회 해볼때마다 매번 현지 이 상황의 상태에 대해 알려준다.
        • commited : 데이터가 로컬 저장소에 안전하게 저장됐다는 것을 의미한다.
        • modified : 수정한 파일을 아직 로컬 저장소에 commit하지 않은 것을 의미한다.
        • staged : 현재 수정한 파일을 곧 Commit할 것이라고 표시한 상태를 의미한다.
      • https://t1.daumcdn.net/cfile/tistory/036DEB3F50BF4DAC01
      • Tracked 파일이 아닌 모든 파일은 Untracked 파일이다.
  • Staging Area : Index라고도 부르며 , 버전을 만들려고 준비중인 파일들의 스냅샷의 데이터가 저장된 곳
  • Local repository : Git directory가 있는 곳을 말한다. Git이 프로젝트의 메타 데이터와 객체 오브젝트를 저장하는 곳

reset

git reset --soft [commit ID] git reset --mixed [commit ID] git reset --hard [commit ID] git reset HEAD~10 git reset HEAD^

  • soft : commit된 파일들을 staging area로 돌려놓음. (commit 하기 전 상태로)
  • mixed(default) : commit된 파일들을 working directory로 돌려놓음. (add 하기 전 상태로)
  • hard : commit된 파일들 중 tracked 파일들을 working directory에서 삭제한다.
  • HEAD~취소할커밋수 : 현재로부터 원하는 만큼의 커밋이 취소된다.
  • HEAD^ : 가장 최근 커밋이 취소된다. (기본옵션 mixed)

revert

git revert [commit ID]

지정한 commitid로 돌아간다.

👇🏻 참고사이트

https://velog.io/@njs04210/Git-reset과-revert-알고-사용하기

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
  1. 개념
  2. reset
  3. revert
  4. 2. 언제 reset를, 언제 revert를 쓸까?
  5. 3. reset과 revert의 사용
  6. 👇🏻 참고사이트
'git' 카테고리의 다른 글
  • [Git] git 브랜치 관련 용어 정리하기
Uheeking
Uheeking
안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking의 it로그안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking
Uheeking의 it로그
Uheeking
전체
오늘
어제

공지사항

  • 분류 전체보기 (254)
    • React (48)
    • Node.js (32)
    • Next.js (22)
    • Vue.js (15)
    • javascript (3)
    • Django (19)
    • etc (23)
    • Flutter (30)
    • Error (16)
    • AWS (11)
    • docker & Kubernetes (32)
    • git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
250x250

인기 글

태그

  • docker
  • Props
  • 노드
  • 쿠버네티스
  • node.js
  • 플러터
  • error
  • Create
  • 오블완
  • mosquitto
  • SSR
  • useEffect
  • next.js
  • 리액트
  • NEXT
  • flutter
  • firebase
  • Express
  • supabase
  • 도커
  • Kubernetes
  • Django
  • React
  • sequelize
  • 티스토리챌린지
  • 장고
  • 넥스트
  • AWS
  • Vue.js
  • MySQL

최근 댓글

최근 글

250x250
hELLO· Designed By정상우.v4.5.2
Uheeking
[Git] git reset & revert 개념알고 적용하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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