Git 정리 - 버전 관리 - reset, reflog, revert

'Git' 시리즈Git 정리 - 버전 관리 - reset, reflog, revert

mildsalmon

흔치않고, 진귀하다.

Sign in to view email

git reset HEAD, git reset HEAD^

수정된 파일을 되돌리기 위해서는 checkout을 사용했다.
수정된 파일을 스테이징 또는 커밋을 했다면 reset을 사용한다.

git reset HEAD

수정된 파일을 스테이징 했을 때, 스테이징을 취소하는 방법

git reset HEAD 파일명 git restore --staged 파일명

git reset HEAD^

가장 마지막에 한 커밋을 취소하는 방법

git reset HEAD^

옵션
  • --soft HEAD^
    • 최근 커밋을 하기 전 상태로 작업 트리를 되돌린다.
    • 커밋 직전 스테이징만 한 상태로 되돌린다.

git reset --soft HEAD^

  • --mixed HEAD^
    • 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌린다.
    • 옵션을 따로 사용하지 않을 경우 이 옵션이 기본값이다.
    • 작업 트리에서만 수정한 상태로 되돌린다.

git reset --mixed HEAD^

  • --hard HEAD^
    • 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌린다.
    • 이 옵션으로 되돌린 내용은 복구할 수 없다.

git reset --hard HEAD^

특정 커밋으로 되돌리기 (git reset 커밋 해시)

특정 버전으로 되돌린 다음 그 이후 버전을 삭제할 수 있다.
즉 입력한 커밋으로 이동하고 그 커밋 이후에 만든 커밋을 전부 삭제한다.

  • soft

입력한 커밋으로 이동하고
현재 작업 중이던 파일을 커밋을 하기 전 스테이징 상태로 되돌린다.
2번 커밋으로 이동했다.
2번 커밋 이후의 커밋에서 생성한 f2.txt 파일과 제거한 t1.txt파일이 스테이지에 올라가있다.

git reset --soft 커밋 해시

  • mixed

입력한 커밋으로 이동하고
현재 작업 중이던 파일을 스테이징을 하기 전, 작업 트리에서만 수정한 상태로 되돌린다.
merge t1-3 커밋으로 이동했지만,
da 커밋과 merge t1-4 커밋에서 수정한 내용이 작업트리에 올라가있다.

git reset --mixed 커밋 해시

  • hard

git reset --hard 커밋 해시

입력한 커밋으로 이동하고
파일 수정을 하기 전 상태로 작업 트리를 되돌린다.
3번째 커밋인 1 커밋으로 이동했다.
그 앞의 커밋인 hard 커밋과 2 커밋에서 만든 t2.txt 파일과 제거한 t1.txt파일이 지워졌다.
즉, 현재 작업중이던 파일을 다 버리고 1 커밋으로 이동한 것이다.

브랜치에서 reset

현재 저장소를 이렇게 구성했다.

  • soft

soft 옵션은 현재 작업 중이던, 커밋한 파일을 스테이지에 올림

git reset --soft (커밋해시)

  • mixed

mixed 옵션은 현재 작업 중이던, 커밋한 파일을 작업 트리에 올림

git reset --mixed (커밋해시)

  • hard

hard 옵션으로 가면 현재 작업 중이던, 커밋한 파일을 다 버리고 이동

git reset --hard (커밋해시)

작업 다 끝나고 다시 확인해보니 start 커밋에 a1.txt가 지워져 있는 상태였다.
...
start 커밋은 아무 영향 없으니 그냥 도형 그림에서 a1.txt가 있다고 생각하고 이해해주길 바란다..

reset 되돌리기 (git reflog)

깃에서 reset을 잘못 입력했을 경우 참 골때리게된다.
reset은 묻지도 따지지도 않고 기존 데이터를 깔끔히 지워버리니 말이다.

그럴때 자신이 원하는 지점으로 reset을 되돌릴 수 있다.

git relog git reset --hard HEAD@{0}

커밋 삭제하지 않고 되돌리기 (git revert)

git revert (최신 커밋 해시)

나중에 사용할 것을 대비해서 커밋을 되돌리더라도 취소한 커밋을 남겨두어야 할 때 사용한다.

빨간 박스는 Vim 파일로 열린 파일을 의미한다. 로그를 보면 기존 커밋은 사라지지 않고, reverts commit으로 새로운 커밋이 만들어졌다. oo2 버전 커밋을 지우고 oo2에서 변경했던 이력을 취소한 새 커밋을 만든다.

마치며

다음 챕터에서는 버전별 파일 상태에 대해 포스팅하겠습니다.

참고문헌

이고잉, 고경희, 『Do it! 깃&깃허브 입문』 이지스퍼블리싱(2019)

[GIT] reset 한거 취소하는 방법, https://88240.tistory.com/284, [ shaking shaking]


'Git' 시리즈
Git에 대해 공부하고, 정리한 시리즈
작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.