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 옵션을 사용해주면 된다.

 

번호 제목 글쓴이 날짜 조회 수
75 [VSS] Using Visual SourceSafe – How to backup & restore VSS DB file 황제낙엽 2016.07.12 7521
74 SVN 관련 FAQ [118] 황제낙엽 2006.01.16 6666
73 Subclipse - Subversion Eclipse Plugin (SVN) 황제낙엽 2007.04.05 2969
72 [SVN] VisualSVN Server 의 저장소 백업 및 복원 황제낙엽 2016.11.04 2761
71 SVN 사용시 revision 번호로 버전관리하는 방법 황제낙엽 2012.08.28 586
70 git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 file 황제낙엽 2016.09.29 572
69 버전관리 툴 ( CVS, SVN, VSS, BitKeeper, ClearCase ... ) file 황제낙엽 2005.11.11 548
68 VisualSVN svn 프로토콜 열기 (Open SVN protocol on VisualSVN) file 황제낙엽 2018.11.22 518
67 SubVersion 설치 및 활용 (시리즈 강좌 - 03) 황제낙엽 2008.06.06 479
66 [VisualSVN] SSL 인증서 합치기 file 황제낙엽 2019.03.29 437
65 Previous operation has not finished; run 'cleanup' if it was interrupted file 황제낙엽 2018.04.02 435
64 윈도우에서 깃(git) 서버 설치하기 file 황제낙엽 2016.05.17 404
63 [VSS] How to force logout of all users on VSS? 황제낙엽 2016.07.12 395
62 윈도우에서 TortoiseSVN 아이콘 오버레이가 표시되지 않는 문제 file 황제낙엽 2019.02.12 388
61 git clone [bare/mirror] 정리 file 황제낙엽 2021.09.03 382
60 tortoise, subversion 자동 로그인 캐시 제거(로그아웃) 황제낙엽 2020.02.06 358
59 [SVN] VisualSVN 계정 관리 방법 file 황제낙엽 2017.05.26 352
58 태그(Tag) 생성 file 황제낙엽 2016.09.29 344
57 [VisualSVN] Importing an SSL certificate with private key 황제낙엽 2019.03.29 265
56 10분만에 파악해보는 What is GitHub (Hello World) file 황제낙엽 2016.10.04 236