Git commands(reset, revert)

 reset

이력을 되돌리고자하는 그 당시 상태로 되돌린다.

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


ex) git reset <옵션> ebf3fgh9


ebf3fgh9 이후의 내용과 상태는 옵션에 따라 달라진다.
옵션은 3가지 ( hard, mixed, soft )가 있다.

git reset --hard ebf3fgh9
ebf3fgh9로 돌아간다.
돌아가려는 이력이후의 모든 내용을 지워 버린다.

git reset --soft ebf3fgh9
ebf3fgh9로 돌아간다.
이후의 커밋의 내용, 스테이지가 그대로 남아있어서 바로 커밋할 수 있는 상태로
돌아간다.

git reset --mixed ebf3fgh9
git reset ebf3fgh9 ( 옵션을 공백으로 둘 때는 기본적으로 --mixed로 작동한다. )
ebf3gfgh9로 돌아간다.이후에 변경된 내용들은 남아있지만 인덱스는 초기화됨.
커밋을 하려면 다시 변경된 내용은 추가해야 하는 상태이다.



revert

revert는 이전 이력은 그대로 두고, 되돌릴 커밋의 코드(내용)만 원복시킴.


git revert <원복시킬 커밋>

git revert 2664ce8
git revert 2664ce8..19fgk99(여러개 범위의 커밋을 지정해서 원복)


하지만 이력 중간의 특정 커밋을 reset을 사용하여 취소하려고 한다면 
이후 이력을 모두 날려버리게 된다.
이런 때 revert를 사용하여 특정 커밋의 내용만 되돌릴 수 있다.


또한 이미 원격 리파지토리에 push 를 한 상태라면 reset을 사용하면 reset 하기 이전으로 되돌리기 전까지는 push 할 수 없게됩니다. 


force 옵션은 위험하니 최후의 수단으로 가지고 있는다.


이미 push 한 코드라면 미련을 버리고 revert로 커밋을 되돌려야한다.

-> 왜? push를 하게되면 가장 최신의 commit을 기준으로 브랜치에 반영된다.
    0-1-2-3-4-5-6-7(HEAD) 7번째 commit으로 push를 했고
    4번째 commit을 reset한다하면 5,6,7의 내용이 사라지게 된다.
    정확히는, 옵션에 따라 변경되는 내용이 다르다.
    이미 push된 내용을 보유한 remote의 최신 커밋(7th commit)과 
    local branch의 내용이 다르므로 
    이전 이력을 보존하는 revert가 더 나은 선택이다.



댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

백엔드 개발자가 Djnago fullstack 사이드 프로젝트를하며 ( html, css, vanillaJS 그리고 JS프레임워크 )