sitelink1 https://dev.to/neshaz/when-to-use-git-re...ckout-18je 
sitelink2  
sitelink3  

1. Revert

커밋해온 모든 변경 사항들을 rollback 시킨다.

 

git-revert.png

 

위의 그림처럼, 이전의 커밋 히스토리는 그대로 유지되나, 이것을 되돌리는 새로운 커밋이 그 이후에 추가된다.

 

 

2. Reset

working tree를 특정 reset할 커밋까지 되돌리고, 그 이후의 커밋들은 히스토리에서 모두 삭제된다.

 

git-reset.png

 

위 사진의 동작은, reset하기 전, hotfix 커밋을 2개 작성을 하였는데, 이 2개의 커밋을 없애고,

해당 브랜치의 첫번째 커밋으로 돌리고 싶으면, After Reset 처럼, 초록색 커밋의 Hash값으로 reset 커맨드를 실행한다.

 

이렇게 되면 이후 2개의 Orphans 커밋들은 히스토리에서 삭제된다.

 

1) syntax

git reset --hard <commitHash>

  > commitHash에 되돌리려는 커밋 해쉬값을 넣어 reset 커맨드를 실행한다. --hard 옵션을 통해 로컬의 모든 변경 사항을 지우게 된다.

 

2) 옵션별 상세

* --soft

예시> git reset --soft B

master 브랜치의 HEAD는 B 브랜치를 가리키게 되지만, 인덱스는 여전히 C에 대한 변경사항을 가지고 있다.

git status 명령을 실행하면, 여전히 C에 대한 변경사항이 로컬에서 적용되어있는 것을 확인 할 수 있다. (staging file로 적용되어 있음)

이 때 다시 git commit을 하면 C 변경사항을 커밋할 수 있게 된다.

 

* --mixed

예시> git reset --mixed B

master 브랜치의 HEAD는 B 브랜치를 가리키게 되지만, soft 옵션과 다르게 인덱스는 B commit에 맞게 변경되어 있다. (C commit의 변경사항을 담고 있지 않음)

하지만 working directory에는 여전히 C commit 내용에 대한 변경사항은 적용되어 있다.

따라서 git status 명령을 실행하면 C commit 변경 사항 내용이 Unstaged files로 적용되어 있는 것을 확인 할 수 있다.

이제 이 내용을 다시 커밋하여면, 해당 Unstaged files들을 모두 add 해주고 다시 커밋해주면 된다.
 

* --hard

예시> git reset --hard B

index도 B commit 내용을 가르키게 되고, working directory까지 C commit에 있던 변경사항들을 다 지워버린다.

따라서 C commit에 대한 변경 내용을 아예 확인 할 수 없는 상태가 된다.

그래서 이 옵션은 아예 커밋 변경사항을 히스토리까지 다 지워야 할때 --hard 옵션을 사용해주면 된다.

 

번호 제목 글쓴이 날짜 조회 수
39 sourcetree - 특정 커밋으로 프로젝트 변경 황제낙엽 2025.08.26 0
38 git clone시 보안에 취약하지만 사용자 아이디와 비번 저장해놓고 사용하기 황제낙엽 2025.08.05 0
37 cherry pick 내가 원하는 커밋만 가져오기 file 황제낙엽 2022.02.17 371
36 Git Extensions Online Manual 황제낙엽 2022.02.17 4440
35 심플한 커밋 이력 조회 (git log --pretty=format) [2] 황제낙엽 2022.01.12 342
34 Git 특정 폴더 및 파일만 clone 하기 (작성중) 황제낙엽 2021.10.08 346
33 git remote set-url file 황제낙엽 2021.09.03 299
32 git clone [bare/mirror] 정리 file 황제낙엽 2021.09.03 889
31 Git Repository 이동하기 황제낙엽 2021.09.02 305
30 유용한 Git 명령어 몇가지 황제낙엽 2021.09.02 324
29 Git의 4가지 영역 황제낙엽 2021.09.02 346
28 Git bare repository 황제낙엽 2021.09.02 296
27 git reset의 3가지 옵션 제대로 이해하기 file 황제낙엽 2021.07.31 328
» 이전 커밋으로 되돌리기 (revert, reset) file 황제낙엽 2021.07.31 431
25 Ubuntu 에 Git 설치 황제낙엽 2020.09.13 365
24 Git commit 이력(Merge pull request #00 from repo/branch) 깔끔하게 관리하기 file 황제낙엽 2016.10.04 381
23 10분만에 파악해보는 What is GitHub (Hello World) file 황제낙엽 2016.10.04 554
22 태그(Tag) 생성 file 황제낙엽 2016.09.29 687
21 git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 file 황제낙엽 2016.09.29 939
20 [Git] SourceTree 에서 Global 변수 세팅 file 황제낙엽 2016.09.27 381