git을 이용하여 형상관리를 하다보면 예전 상태로 돌려야하는 순간이 있다.
그 때 사용할 수 있는 명령어가 2가지가 있는데, 바로 reset과 revert이다.
그 동안 잘 모르고 사용했고, 사용하면서도 맞겠지? 하고 썼었는데... 이번에 공부를 하면서 보니 정말 위험한 행동이였다. 한 번 정리해보도록 하겠다.
git reset
git reset은 과거 시점으로 돌아가는 것이다.
예시를 보자.
commit은 1부터 7까지 순차적으로 진행되어 있다. 현재 원하는 상황은 스포하기 전 상황으로 돌아가는 것이다.(3번)
이럴 때 사용하는게 git reset이다.
git reset <2번 commit> 명령어를 이용하면, 2번 commit 시점 직후로 돌아갈 수 있다.
git log를 쳐보면 2번 이후의 커밋들이 모두 사라져 있는 것을 볼 수 있다.
결론, git reset은 특정 커밋 시점으로 돌아가는 것이다.
git revert
git revert는 특정 커밋을 취소하는 것이다.
예시를 보자. 상황은 아까와 같다.
하지만 원하는 상황이 다르다. 3번의 스포 당한 상황이 없어졌으면 좋겠다는 상황이다.
이럴 때 사용하는게 git revert이다.
git revert <3번 commit> 명령어를 이용하면, 3번 commit이 없던 일이 된다.
git log를 보자.
3번 txt파일이 delete 된 것을 볼 수 있다.
git log를 보면 commit 내역은 그대로 남아 있다. 그리고 revert한 내역이 추가 되어있다.
다른 점은 ls를 통해서 파일을 확인해보면 3번 txt파일이 사라져 있을 것이다.
결론, git revert는 어떤 시점의 커밋을 없던 일로 만든다.
번외
git reset에는 옵션이 있다. --soft, --mixed(default), --hard.
각 차이를 살펴보자.
이전 상황과 다른 점은 8번을 스테이지에 올려놓고 9번은 untracked상태이다.
soft는 working tree에 있는 파일을 건드리지 않고 스테이지에 올라간 파일 또한 건드리지 않는다.
mixed는 working tree에 있는 파일을 건드리지 않고 스테이지에 올라간 파일들만 다 내려준다.
hard는 working tree와 스테이지의 파일 모두 건드린다. reset 시점 이후 tracked된 파일은 모두 버려진다.
해당시점 이후 | soft | mixed | hard |
커밋되었던 파일 | 스테이지로! | 언트랙드로 | 삭제! |
스테이징 된 파일 | 그대로! | 언트랙드로 | 삭제! |
언트랙드였던 파일 | 그대로! | 그대로! | 그대로! |
끝.
'살짝 정리' 카테고리의 다른 글
도커 이미지 만들기 (0) | 2021.07.14 |
---|---|
도커 기본 구조? 내게 도커란 (0) | 2021.07.12 |
AWS Cloud Practitioner Essentials 모듈1 (0) | 2021.06.29 |
컴포넌트의 내부 구현을 숨기자 (0) | 2021.06.26 |
이진탐색 (0) | 2021.06.24 |