본문 바로가기

개발/git

git 되돌리기

반응형

git revert/reset차이


d

c

b

a

a부터 d까지 순서대로 commit 한 상태일 때 되돌리기를 해보자. 

되돌리기 방법중 대표적인 Revert와 Reset은 차이가 있다.


1. Revert: d를 취소하는 commit을 발생 시킨다.

2. Reset : d를 아예 취소시킨다.


Revert를 할 경우 d를 취소하는 commit 을 추가하게 된다. 

Revert를 실행 한 후 commit 리스트를 살펴보면

-d

d

c

b

a

순서로 나타나게 되며 이전 d를 commit 한 이력은 그대로 둔 상태에서 추가로 -d commit이 추가된것을 볼 수 있다.

이 후 상대방에게도 pull할 경우 -d가 추가된다. 

 

Reset은 d를 아예 삭제 한다.

Reset을 실행 한 후 commit 리스트를 살펴보면

c

b

순서로 나타나며 이전 d를 commit 한 이력 자체를 삭제 하고 이전 커밋으로 돌아간다(HEAD를 옮기다는 표현을 쓴다)

하지만 이미 푸시 한 상태로 서버(remote)에도 d까지 올라간 상태라면 커밋을 리셋하면 서버와 로컬 커밋 히스토리가 일치하지 않는다. 

d를 삭제하고 강제로 push 하고 싶다면 --force 를 통해 강제로 서버에 올릴수 있다.

상대방이 pull 받은 상태에서 Resert을 실행한 경우 상대방은 리파지터리 다시 받는게 깔끔하다.


https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0


반응형