본문 바로가기
Programming/Git

[Git]시점 되돌리기(reset, revert)

by 배고프당 2020. 7. 10.
728x90

Git 시점 되돌리기 ( Reset / Revert)

 

Reset은 이력을 그 당시로 아예 되돌리는 것이고.

Revert는 이전 이력은 두고 되돌릴 커밋만 원래의 코드로 원복 시킨다.

 

Git으로 상태관리를 하고 있다고 해보자.

어떤 팀원이 크리티컬하고 엄청난 버그가 포함된 코드를 커밋했다고 했을때 과거의 일어난 일을 되돌리는 방법은 두가지가 있다.

 

- Reset : 이 커밋을 하기 전으로 되돌리기 (로컬에서 커밋만 한 경우)

- Revert : 특정 커밋을 없었던 일로 만들기 (원격에 푸쉬까지 한 경우)

 

1. Revert

git log 확인

팀장 : 누가 크리티컬한 엄청난 버그가 포함된 코드를 커밋도 모자라 푸쉬까지한거야!!!!  빨리 revert 시켜!!!

 

$ git revert <크리티컬한 엄청난 버그가 포함된 커밋 지정>

ex) git revert d00adb2

git revert d00adb2

팀장: 휴 한숨 돌렸군...git log좀 봐볼까

revert가 완료된 후 git log

 

2. Reset

 

팀장: 길동아 앞으로는 푸쉬하기 전에 로컬에서 충분한 테스트를 하고 푸쉬하거라

길동: 네..(이번에는 실수하지 말아야지...)

 

몇 분 뒤.....

 

길동: 큰일났다.... 실수로 잘못된 파일을 로컬에 커밋해 버렸네...그래도 아직 서버로 푸쉬를 하지 않아서 다행이다..

       로컬 저장소에서 커밋 실행을 취소하려면 어떻게 해야하지?

 

git log

$ git reset <option> <commit id>

1) option 속성

 * soft : stage 파일에 올린 상태 (바로 커밋할수 있는 상태)

 * mixed : unstage 파일 상태 (default상태 / 옵션을 적지 않으면 mixed로 작동함)

 * hard: 삭제 상태 (돌아가려는 이력 이후의 모든 내용을 지워버린다. 초기화)

git reset HEAD~

(위와 같이 현재부터 몇 개 이전 이력으로 돌아가라고 지정할수도 있다 / 위는 최신 커밋 내역 되돌리기)

 

해당 사항에 맞게 reset 명령어를 치면 아래와 같이 커밋 내역은 취소되고 mixed 옵션으로 unstage 파일 상태가 된 걸 확인할 수 있다.

 

로컬 커밋내역 사라진 모습

정리

- Reset : 이 커밋을 하기 전으로 되돌리기 (로컬에서 커밋만 한 경우) / git log 이력에 남지 않는다

- Revert : 특정 커밋을 없었던 일로 만들기 (원격에 푸쉬까지 한 경우) / git log 이력에 남는다

- Revert는 원격에 푸쉬까지 했을때 사용해 한다.

- Reset은 로컬에서 한 커밋을  취소할때 사용한다

728x90

댓글