티스토리 뷰

Git Reset 이전 커밋(Commit)으로 되돌리기

 

시작하기 전에

Git Reset을 배우기 전에 이전 포스팅에서 언급한 Git Revert의 기능을 먼저 보시기를 추천합니다.

Reset은 Revert와 다르게 Commit의 이력을 남기지 않고 삭제하기 때문입니다.

 

Reset 옵션은 아래와 같이 3가지 

  • Soft - 모든 로컬 변경사항을 유지  (변경 이력 삭제 - Unstaged에 - 코드는 그대로 있음)  
  • Mixed - 작업 상태는 그대로 두지만 인렉스는 리셋 (변경 이력 삭제 - Staged에 - 코드는 그대로 있음)
  • Hard - 모든 작업 상태 내 변경 사항을 버림 (commit 이후의 변경 이력 완전 삭제 - 코드도 삭제 됨 - 신중히 사용!)

1. 이전 Revert에서 사용한 예제에 연속 - example2.txt 파일을 생성 후 4번의 commit (1.커밋 ~ 4. 4번 커밋) 

example2.txt 내용


2. "3번 커밋" 선택 후 "Reset current branch to this commit"을 선택.

(소스트리 설정이 한글로 되어 있다면 "이 커밋까지 현재 브런치를 초기화"를 선택)

 

옵션은 "Hard -  .. " 선택


"Hard - .. " 옵션 선택 후 Reset 실행 결과

모든 작업 상태 내 변경 사항을 버림 (commit 이후의 변경 이력 완전 삭제 - 코드도 삭제 됨 - 신중히 사용!)

 

소스의 변화 - "4번" 내용이 삭제 되어 1~3번 항목만 확인 됨


주의!! 

Hard Reset 후 Pull을 받으면 어떻게 될까?

orgin에 있던 내용이 그대로 다운로드 되어 ... 결국 Reset 이전의 모습으로 Rollback 되었다

(아래와 같이 "4번"이 다시 등장) 

Rollback 되지 않으려면 Pull 금지!


3. Reset된 내용을 Push

   "Force Push" 옵션 체크를 하지 않은 상태에서 Push하면 그림 2와 같이 오류가 발생 Push 되지 않는다 

그림 2 - 충돌

 


결론 : Revert와 Reset의 차이점

Reset 이전에는 "4.4번 커밋"이라는 commit 이력이 존재하였으나

Reset 후에는 어디에서도 "4.4번 커밋"이라는 commit 이력을 찾을 수 없다..

Reset의 사용으로 우리는 과거에 어떤 작업이 있었는지, 누가 무슨 작업을 했었는지 알 수가 없다는 것..


 

"2번 커밋" 내역에서 Mixed 옵션으로 Reset한 결과

Staged에 Uncommitted changes (소스가 그대로 있음) 

소스의 변화 - 없음

 

 

Push 결과 

(Push는 위 Hard 옵션으로 진행을 참고)

Hard 옵션과 다른점은 "3번 커밋" 이력은 삭제 되었지만 소스가 그대로 있다는 것!  

 

 

마지각 Soft 옵션은 알아서... 

 

 

마치며.. 

 

Reset의 경우 Git 관련 도서나 인터넷상의 많은 글들에서 공통적으로 언급하고 있는 주의 사항이 있습니다

 

"나 혼자 작업 할때, 나만 사용중인 브랜치에서,

그리고 orgin(원격저장소)가 아닌 로컬저장소에서"

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday