본문 바로가기
Dev Tools/Git

[Git] Git (reset, revert) 정리 및 개념

by lucas_owner 2023. 2. 1.

Git 명령어 - reset, revert 개념 및 정리 

- git 을 사용하다 보면 다양한 상황이 발생하는데, 그중에서는 정말 무시무시한 일이 발생 할 수도 있다.

예를 들자면, RollBack을 해야 한다거나, Conflict 가 났다거나.. 혹은 Commit 을 취소하고 싶다거나

이럴때 사용하는 git 명령어인 reset, revert의 개념에 대해 알아 보자! 

 

 

git reset : 커밋 취소

- reset 명령어는 대표적으로 커밋을 취소하는 명령어이다, 또한 Staging(스테이징) 취소 가능하다.

옵션에 따라 디테일한 설정을 할 수 있다. 

 

- 옵션을 적지 않고 - git reset 할 경우 스테이징 취소. 

 

○ 옵션 

  1. --soft: 커밋 취소, Staging 상태 유지(add)
  2. --mixed: 커밋 취소, Staging 취소, local은 변경 상태로 유지 (옵션설정 없을시 default)
  3. --hard: 커밋취소, Staging 취소, local 변경 상태 취소
  4. HEAD 옵션 위의 3가지 옵션뒤에 사용한다. (--soft HEAD^)
    1. HEAD^ : 최신 커밋 취소
    2. HEAD~(수량) : 수량에 숫자를 적으면 해당 숫자만큼 최근 커밋부터 해당 숫자까지 커밋 취소.

* hard 옵션의 경우. IDE에서 (HEAD Revision, Reset Head)으로 표현된다.

즉 최초 상태로 돌아가는것이다. 

 

○ 시나리오 - 사용 예시 상황

  1. code 변경 후 커밋,  커밋을 취소하고 파일을 추가하여 Commit 해야 하는 경우. (--mixed 사용)
  2. code 변경 후 커밋, Commit 내용이 Error가 발생하여 커밋전으로 돌아가야하는경우. (--hard 사용)
  3. code 변경 후 add, 스테이징을 취소해야 하는경우. (--mixed)
  4. git add (스테이징) 후, unStaged 상태로 되돌리고 싶을 경우 (git reset)
  5. 특정 파일만 unstaged 상태로 만들때 (git reset [파일경로]) 

○ git Reset 예시. 

# git reset --(모드) (돌아갈 커밋{hash})

git reset --mixed e5843d0

○ reset 상황별 예시. 

# soft - Staging 되어 있음.
git reset --soft e58c212

git cmommit -m "re Commit"
git push

# mixed - Staging 취소.
git reset --mixed e58c212

git add -A
git commit -m "re commit 2"
git push

# hard - 모든 커밋 이력 삭제.
git commit -m "1"
git commit -m "2"
git commit -m "3"

git reset --hard (1번 커밋)
git push

- 상황별 reset 사용법이다. 주의해야 할 것은 --hard 옵션이다. 

- 1번 커밋으로 reset 하면 2,3 번 커밋 이력이 삭제된다. 

- mixed, soft는 변경 이력 즉 커밋은 삭제되지만, 변경된 code의 내용은 남아있게 된다.

 

*** 주의

- 만약 협업을 하고 있다면, reset 후 push 는 하면 안되는 행동이다. 저장소에 push 하면 에러가 나지만, 

--force 옵션으로 강제로 덮게 된다면 reset 된 커밋으로 덮어지기 때문이다.

 

 

git revert : 커밋 내용 되돌리기

- revert 명령어는 특정 커밋이력으로 되돌리기 위해서 사용된다. 

하지만 revert 했다는 이력또한 커밋으로 남게 된다. 

커밋을 삭제하고 돌아가고싶다면 revert 명령어는 적절하지 못하다. 

 

○ git revert 예시

git revert ec12e5w
  1. git revert [커밋아이디]
  2. vim 상에 내용 편집 (스킵 가능) esc -> :wq 
  3. git push 하면 revert 적용.

 

정리 (reset, revert)

- 언제 reset, revert 를 사용해야 할까 ?

 

- 되돌려야 할 commit이 local 에만 존재할 경우 - reset

reset 명령어는 해당 커밋을 삭제, 커밋 기록을 변경하는 작업이다. 

그렇기 때문에 협업을 하고 있다면 (협업 하는 branch 에 reset 할 경우)

팀원이 push 할때 충돌이 발생하게 된다. 

 

- 되돌려야 할 commit이 push 된 경우 - revert

revert 명령어는 해당 commit 을 취소하고 취소 commit 을 새로 남긴다. 

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

되돌리는것이 좋은 전략이다. 

반응형

댓글