sitelink1 | https://dev.to/neshaz/when-to-use-git-re...ckout-18je |
---|---|
sitelink2 | |
sitelink3 |
1. Revert
커밋해온 모든 변경 사항들을 rollback 시킨다.
위의 그림처럼, 이전의 커밋 히스토리는 그대로 유지되나, 이것을 되돌리는 새로운 커밋이 그 이후에 추가된다.
2. Reset
working tree를 특정 reset할 커밋까지 되돌리고, 그 이후의 커밋들은 히스토리에서 모두 삭제된다.
위 사진의 동작은, 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 옵션을 사용해주면 된다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
37 | cherry pick 내가 원하는 커밋만 가져오기 | 황제낙엽 | 2022.02.17 | 29 |
36 | Git Extensions Online Manual | 황제낙엽 | 2022.02.17 | 56 |
35 | 심플한 커밋 이력 조회 (git log --pretty=format) [2] | 황제낙엽 | 2022.01.12 | 13 |
34 | Git 특정 폴더 및 파일만 clone 하기 (작성중) | 황제낙엽 | 2021.10.08 | 22 |
33 | git remote set-url | 황제낙엽 | 2021.09.03 | 6 |
32 | git clone [bare/mirror] 정리 | 황제낙엽 | 2021.09.03 | 382 |
31 | Git Repository 이동하기 | 황제낙엽 | 2021.09.02 | 19 |
30 | 유용한 Git 명령어 몇가지 | 황제낙엽 | 2021.09.02 | 7 |
29 | Git의 4가지 영역 | 황제낙엽 | 2021.09.02 | 18 |
28 | Git bare repository | 황제낙엽 | 2021.09.02 | 10 |
27 | git reset의 3가지 옵션 제대로 이해하기 | 황제낙엽 | 2021.07.31 | 13 |
» | 이전 커밋으로 되돌리기 (revert, reset) | 황제낙엽 | 2021.07.31 | 40 |
25 | Ubuntu 에 Git 설치 | 황제낙엽 | 2020.09.13 | 46 |
24 | Git commit 이력(Merge pull request #00 from repo/branch) 깔끔하게 관리하기 | 황제낙엽 | 2016.10.04 | 82 |
23 | 10분만에 파악해보는 What is GitHub (Hello World) | 황제낙엽 | 2016.10.04 | 236 |
22 | 태그(Tag) 생성 | 황제낙엽 | 2016.09.29 | 344 |
21 | git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 | 황제낙엽 | 2016.09.29 | 572 |
20 | [Git] SourceTree 에서 Global 변수 세팅 | 황제낙엽 | 2016.09.27 | 67 |
19 | 쓸만한 Git 용 GUI 프로그램 | 황제낙엽 | 2016.09.26 | 181 |
18 | Git 관련 참조 URL | 황제낙엽 | 2016.09.13 | 98 |