[초보용] Git 되돌리기( Reset, Revert )

 

Git을 익히면서 헷갈렸던 것들 중의 하나가 이력을 되돌리기 입니다. Git에서 이력을 되돌리는 방법은 여러가지가 있지만, 그 중에 대표적인게 Reset과 Revert 입니다. 단어 의미만 보고는 둘 사이의 차이를 알기 쉽지 않은데, 풀어서 설명해보면 Reset은 시계를 다시 맞추드시 이력을 그 당시로 되돌리는 것이고, Revert는 이전 이력은 그대로 두고, 그 되돌릴 커밋의 코드만 원복시킵니다. 이 개념을 이리온님께서 만화로 설명해 주신게 있는데 참고하시면 이해하는데, 더 도움이 됩니다.

( 개발바보들 1화 — git “Back to the Future ”)

 

1. Reset

앞에서 설명한대로 Reset은 시계를 다시 맞추는 것입니다. 돌아 가려는 커밋으로 리파지토리는 재설정되고, 해당 커밋 이후의 이력은 사라집니다. 예를 한번 들어볼까요? ( 일반적인 개발 이력과는 차이가 있지만, 이해가 쉽게 하기 위해 영화 “유주얼 서스펙트”를 이용했고 이에 대한 스포일러를 포함합니다. 하지만, 이미 보셨거나 들어보셨을 것이라 생각합니다. )

그림1. 기대했으나 스포일러 때문에 실망했던 이력

[그림1]을 보시면 기대했던 영화를 예매하였으나 스포일러 때문에 실망했던 이력을 볼 수 있습니다. 그래서 스포일러를 보기 전으로 이력을 되돌리기로 합니다. 마치 내가 기억하고 있는 내용을 변경하는 거죠. 커밋 a3bbb3c 이후의 기억은 지우고 싶습니다. Reset은 다음과 같이 사용합니다.

 

$ git reset <옵션> <돌아가고싶은 커밋>

 

여기에 옵션이 몇가지 있는데 자주 쓰는 것 hard, mixed, soft 세가지가 있습니다. 영화를 예매하고 검색한 이력인 a3bbb3c 이후에 발생했던 ( 표를 예매하고, 팝콘과 사이다를 구매 같은)변화에 대해서 어떻게 할지에 대한 것입니다.

 

(1) hard

돌아가려는 이력이후의 모든 내용을 지워 버립니다. 이렇게 하면 표를 예매하고, 팝콘과 사이다를 구매했던 모든 것들이 지워지고 모든것이 초기화 됩니다.

 

$ git reset --hard  a3bbb3c

 

그림2. hard 옵션으로 reset한 후의 이력

 

(2) soft

돌아가려 했던 이력으로 되돌아 갔지만, 이후의 내용이 지워지지 않고, 해당 내용의 인덱스(또는 스테이지)도 그대로 있습니다. 바로 다시 커밋할 수 있는 상태로 남아있는 것입니다. 기억은 되돌려졌지만, 표와 팝콘과 사이다는 손에 들려있는 상태입니다.

 

$ git reset --sorf a2bbb3c

 

그림3. soft옵션으로 reset한 후의 이력

그림4. soft옵션으로 reset한 후의 파일 상태

 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com


(3) mixed ( 옵션을 적지 않으면 mixed로 동작합니다. )

 

역시 이력은 되돌려집니다. 이후에 변경된 내용에 대해서는 남아있지만, 인덱스는 초기화 됩니다. 커밋을 하려면 다시 변경된 내용은 추가해야 하는 상태입니다. 기억도 되돌려 졌고, 표와 팝콘 그리고 사이다는 사야겠다는 마음만 남아있다고 할 수 있습니다.

 

$ git reset --mixed a2bbb3c

 

그림5. mixed 옵션으로 reset한 후의 이력

그림6. mixed 옵션으로 reset한 후의 파일 상태

 

또 되돌아가는 커밋을 커밋 해쉬를 통해서 직접 지정할 수도 있고 현재부터 몇개의 커밋을 되돌릴 수도 있습니다 [그림1]에서 처럼 15413dc 부터 a3bbb3c로 돌아가려면

 

$ git reset HEAD~6

 

위와 같이 현재부터 6개 이전 이력으로 돌아가라라고 상대적으로 지정할 수도 있습니다.

 

2. Revert

Revert는 상태를 되돌린다고 볼 수 있습니다. 스포를 당한 커밋을 revert하고 현재 작성중인 코드만 본다면 reset과 동일한 (hard 옵션 준거만 빼고) 결과를 가집니다. 하지만 이력은 같지 않습니다. 먼저 결과를 먼저 보고 이어가겠습니다. (reset과 동일하게 스포일러를 당한 것을 되돌립니다)

그림7. 스포일러 당한 커밋을 되돌림

이전 이력은 그대로 있고, 스포일러를 당했던 커밋만을 되돌렸습니다. 마치 스포일러 당한것에 대한 것을 기억하고 있지만, 그 내용은 알지 못하는 것처럼 말이죠. ( 이 내용은 앞에서 언급했던 Devpools의 설명에 나온 모나리자 눈썹의 내용이 더 이해가 쉬울것 같습니다. )

revert 를 하는 방법과 스포일러 댓글의 커밋을 되돌리는 것은

 

# git revert <되돌릴 커밋> 
git revert 2664ce8

 

이고 되돌릴 커밋이 여러개라면 범위를 주어서 여러개를 선택할 수도 있습니다. [그림1]에서 예를 들면 댓글을 읽은 것부터 영화관을 나설때까지 모두 되돌리려면 아래 코드처럼 범위를 주시면 됩니다.

 

git revert 2664ce8..15413dc

 

 
 
 
 
 


 

3. 언제 reset을 하고 언제 revert를 해야하나?

단순하게 생각하면 reset을 하는 것이 revert를 하는 것보다 이력을 더 단순하게 만들어주기 때문에 revert의 장점이 많지 않아 보입니다. 하지만 이력 중간에 로그 출력하도록 한 커밋이 있고 그 커밋만을 취소하려고 한다면 reset을 사용하여 이후의 이력을 모두 제거하는 것은 이후 이력을 모두 날려버리는 결과를 나을 것입니다. 이런 때 revert를 사용하여 해당 커밋의 내용만 되돌릴 수 있습니다. 또한 이미 원격 리파지토리에 push 를 한 상태라면 reset을 사용하면 reset 하기 이전으로 되돌리기 전까지는 push 할 수 없게됩니다. (물론 force라는 무시무시한 옵션이 있기는 합니다. ) 그래서 이미 push 한 코드라면 미련을 버리고 revert를 하셔야 합니다.

 

[출처] https://www.devpools.kr/2017/02/05/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert/

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» [초보용] Git 되돌리기( Reset, Revert ) file 졸리운_곰 2021.06.22 85
1017 [DOCKER] Windows Server 2016에서 도커 설치하기 졸리운_곰 2021.06.13 103
1016 [docker, windows server 2016] Installing Docker onto Windows Server 2016 file 졸리운_곰 2021.06.13 98
1015 [windows powershell] Setup Docker on Windows Server 2016 file 졸리운_곰 2021.06.13 147
1014 [ScreenToGif]움짤 만들기 프로그램, pc 화면을 움직이는 gif 로 캡쳐 file 졸리운_곰 2021.06.12 91
1013 [一日 30分 인생슬리의 학습법] 내가 AI 업계를 떠난 이유 5가지 file 졸리운_곰 2021.05.29 121
1012 [一日 30分 인생슬리의 학습법] 정규식 쉽게 베우기 : Learn Regex Easy Way file 졸리운_곰 2021.05.24 98
1011 [一日 30分 인생슬리의 학습법] Improving CartoonGAN 소개 file 졸리운_곰 2021.05.20 220
1010 [공통] 마크다운 markdown 작성법 file 졸리운_곰 2021.05.17 87
1009 자료구조 : JSON 구조 file 졸리운_곰 2021.05.17 113
1008 BitTorrent (토렌트) 의 원리와 구조 졸리운_곰 2021.05.14 92
1007 [1日 30分 인생 승리의 학습법] 훌륭한 개발자가 되는 방법 file 졸리운_곰 2021.04.28 94
1006 [1日30分 인생승리의 학습법] 개발자의 실수 -> 프로젝트 실패의 요인 노트 : 개발 프로젝트 실패하는 법 졸리운_곰 2021.04.28 86
1005 [1日30分 인생승리의 학습법] 검색에서 정보를 구성하는 방법 졸리운_곰 2021.04.28 81
1004 [1日30分 인생승리의 학습법] 웹크롤러(WebCrawler) file 졸리운_곰 2021.04.28 105
1003 [1日30分 인생승리의 학습법]프로덕션 환경에서 텐서 플로우 모델을 구축하는 방법 : gRPC로 텐서플로우 서빙 서비스 플랫폼 개발 file 졸리운_곰 2021.04.27 118
1002 [1日 30分 인생승리의 학습법] 나의 Sparx Enterprise Architect(UML) 활용기 file 졸리운_곰 2021.04.25 87
1001 [인공지능][전문가시스템][프롤로그][prolog] 어떤 컴퓨터 프로그래밍 언어를 먼저 배워야 할까? file 졸리운_곰 2021.04.23 117
1000 [WebGPU] Apache TVM을 사용하는 브라우저에서 WebGPU 기반 기계 학습 file 졸리운_곰 2021.04.17 173
999 테라폼이란? 클라우드 인프라스트럭처 자동화 도구 file 졸리운_곰 2021.03.28 124
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED