티스토리 뷰

 

 

 

 

오늘은 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 [커밋 아이디]
  1. git revert [커밋아이디]
  2. vim 상에 내용 편집 (스킵 가능) esc -> :wq 
  3. 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을 새로 남긴다.

즉 이미 존재하는 커밋의 기록을 덮어쓰지 않기 때문에, 협업을 할 경우 해당 명령어를 사용하여 되돌리는 것이 좋다.