티스토리 뷰
오늘은 git reset과 git revert를 사용하는 경우와 각각의 차이에 대해 알아보려 한다.
git을 사용하다보면 롤백을 해야 할 때, 커밋을 취소하고 싶을 때 등등 다양한 상황이 발생한다. 이럴때 사용하는 git 명령어인 reset, revert의 개념에 대해 알아보자.
1. git reset: 커밋 취소
git reset [옵션] [커밋 아이디]
git reset은 대표적으로 커밋을 취소하는 옵션이다.
옵션은 soft, mixed, hard 3가지가 있고 옵션에 따라 디테일한 설정이 가능하다.
옵션은 아래와 같다.
(1) git --soft: HEAD가 특정 커밋을 가리키도록 이동시킨다.
(2) git --mixed: staging area도 특정 커밋처럼 리셋한다.
(3) git --hard: working directory도 특정 커밋처럼 리셋한다.
이때 커밋 아이디 대신 HEAD의 위치를 기준으로 한 표기법(예 : HEAD^, HEAD~3)을 사용해도 된다.
각 옵션은 어떨 때 사용해야 할까? 3가지 상황을 통해 알아보자.
1. git reset --soft: git add (스테이징 후), unstaged 상태로 되돌리고 싶은 경우
2. git reset --mixed: code 변경 후 커밋, 커밋을 취소하고 파일을 추가하여 Commit 해야 하는 경우
3. git reset --hard: code 변경 후 커밋, Commit 내용이 Error가 발생하여 커밋전으로 돌아가야하는경우
+) --soft와 mixed의 차이가 헷갈려서 추가
- 단지 커밋 메시지를 다시 작성하고 싶은 경우나 기존 스테이징에 변경 파일을 추가하고 싶은 경우에는 기존 스테이징을 유지할 필요가 있으니까 soft 옵션을 쓰면 유용
- 커밋에 포함될 파일들을 다시 새롭게 구성하고 싶은 경우에는 mixed옵션으로 스테이징을 되돌려서 다시 새롭게 스테이징
2. git revert: 커밋 내용 되돌리기
git reset [커밋 아이디]
- git revert [커밋아이디]
- vim 상에 내용 편집 (스킵 가능) esc -> :wq
- git push 하면 revert 적용
git revert 명령어는 특정 커밋 이력으로 되돌리기 위해 사용된다.
여러개의 커밋을 한 번에 revert 할 수도 있다.
다음과 같은 커밋 이력이 있다고 가정해보자.
여기서 4af1과 eea5의 커밋을 revert 하고 싶다면 다음과 같이 적으면 된다.
git reset facd..eea5
이 때 주의해야 할 점은 facd는 revert 대상에 포함되지 않는다.
facd 바로다음부터 eea5까지 revert 된다.
3. git reset, revert 정리
언제 reset, revert를 사용해야 할까?
1. reset: 로컬 레포지토리에서만 작업중이라면 reset을 사용해도 무방
reset 명령어는 해당 커밋을 삭제, 커밋 기록을 변경하는 작업이다.
그렇기 때문에 협업을 하고 있다면 팀원이 push 할 때 충돌이 발생하게 된다.
2. revert: 리모트 레포지토리를 두고 작업중이라면 revert 사용
revert 명령어는 해당 commit을 취소하고 취소 commit을 새로 남긴다.
즉 이미 존재하는 커밋의 기록을 덮어쓰지 않기 때문에, 협업을 할 경우 해당 명령어를 사용하여 되돌리는 것이 좋다.
'Git&Github' 카테고리의 다른 글
[Git] untracked files 까지 포함한 stash 생성 방법 (0) | 2024.04.26 |
---|---|
[Git] Git 파일의 네 가지 상태 ('Untracked', 'Unmodified', 'Modified', 'Staged') (0) | 2024.03.19 |
[Git] git pull과 git fetch의 차이점 / git fetch 사용법 (0) | 2024.03.18 |
[Git] merge 하는 법 (0) | 2023.10.16 |
[Git] Fast-Forward (병합 방법) (0) | 2023.10.13 |
- Total
- Today
- Yesterday
- Target
- 비동기
- 객체
- react
- 리액트
- GitHub
- Next.js
- 비제어 컴포넌트
- hydrationboundary
- 동기
- html
- 코드잇 스프린트
- tanstackquery
- 프론트엔드
- 유사배열객체
- 스프린트프론트엔드6기
- 코드잇스프린트
- 제어 컴포넌트
- arguments
- 배열
- rest parameter
- map
- javascript
- currentTarget
- innerhtml
- 중급 프로젝트
- CSS
- js
- Git
- 취업까지달린다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |