관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[Git] Reset, Revert 차이 간략정리 본문

Git

[Git] Reset, Revert 차이 간략정리

막무가내막내 2020. 3. 20. 13:23
728x90

프로젝트를 하다가 revert를 사용하게 되었는데 그러면서 둘의 차이점에 대해 알아보게 되었습니다.

깃 커밋을 잘못해서 되돌려야하는 경우가 있습니다. 그 경우에 reset 과 revert 명령어를 사용하게 됩니다.

이 둘의 차이점에 대해 아주 간단하게 정리해볼려고 합니다.

 

우선 둘 다 과거 커밋을 건드리는 작업입니다.  (잘 못 건드리면 유희왕 시간의 마술사 효과처럼 지금까지 개발한 것들이 다 날라가거나 고칠 수 없는 지옥을 맛 볼수 있습니다.)

commit특정사건으로 표현하겠습니다.

차이점은 reset은 시간을 과거의 특정 사건으로 되돌린다고 생각하고 revert는 현재에 있으면서 과거 특정 사건들만을 없던 일로 만드는 거라고 생각하면 이해하기 쉽습니다.

 


[Reset]

reset은 특정 사건으로 되돌아가게 되는데 과거로 되돌아 갔으니 해당 사건 이후의 사건들은 모두 사라집니다. reset이란 뜻과 일맥상통합니다.

그리고 reset은 과거의 이력이 커밋에 안남고 깔끔히 과거로 돌아가지만 revert는 특정 사건을 revert 했다는 이력이 커밋에 남게 됩니다.

 

깃 명령어는 다음과 같습니다. 깃 크라켄이나 개발툴로 GUI로 더 쉽게 조작할 수 도 있습니다.

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

ex)
git reset --soft abcdef
git reset --mixed abcdef  (옵션 작성안할 시 기본값)
git reset --hard abcdef 
git reset HEAD~10 (현재부터 10개 이전으로 복원)

 

–soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
–mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
–hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.

출처:  https://gmlwjd9405.github.io/2018/05/25/git-add-cancle.html

 

hard는 가장 깔끔하지만 해당 커밋 이후의 작업들이 모두 사라지므로 확실할때만 신중히 사용해야겠습니다.

mixed의 경우 soft와 달리 워킹 디렉토리는 유지되지만 index가 취소되므로 취소된 파일들을 다시 add 해줘야합니다.

 

 

 

 

[Revert]

그에 반해 revert는 앞서 말한 것 처럼 특정 사건을 골라서 없던일로 만듭니다. 또한 앞서 말한 것처럼 과거 특정 사건을 없에주지만 revert를 했다는 이력이 남게 됩니다. 

그리고 없엘려는 특정 사건의 과거와 미래와 얽혀 충돌이 나는 경우가 많습니다.

깃 명령어는 다음과 같습니다.

git revert <돌아가고싶은 커밋id>

 

 

[P.S]

revert는 이력을 남겨주므로 뭘 고쳤는지 알 수 있다는 점이 장점인 것 같습니다. (특히 협업에서 중요할 것 같습니다. reset 하면 자기밖에 모르니..) 그리고 reset으로는 remote repository에 이미 push된 커밋을 조작할 수 없으니 이떄는 revert 만 사용가능합니다.

아니면 reset을 하고 강제 푸쉬하는 방법도 있긴 합니다.

 

 

 

참고하고 매우 잘 설명된 만화입니다.

http://www.devpools.kr/2017/01/31/%EA%B0%9C%EB%B0%9C%EB%B0%94%EB%B3%B4%EB%93%A4-1%ED%99%94-git-back-to-the-future/

 

개발바보들 1화 - git "Back to the Future"

  이 내용에 대한 자세한 기술적인 설명이 듣고 싶나요? 연속되는 다음글을 참조하세요    

www.devpools.kr

 

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

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한 이야기다. HEAD는 포인터인데 경로에 따라 파일별로 기준이 되는 커밋을 부분적으로 적용하는 건 불가능하다. 하지만, Index나 워킹 디렉토리는 일부분만 갱신할 수 있다. 따라서 2, 3단계는 가능하다. 이 명령을 실행한 것과 같은 결과를 만들려면 워

git-scm.com

 

728x90
Comments