[GIT] git reset
1. git은 저장된 파일을 통해서 commit 정보를 기록한다. (.git 파일)
git과 repository 연동 시 .git 파일이 생성되고 이 .git 파일을 통해 commit 내용을 기록 관리한다.
HEAD : 현재 위치하고 있는 브랜치 commit의 정보를 담고 있다. -> (refs/heads/master)
index : 현재 위치하고 있는 브랜치의 Stagin Area의 정보를 담고 있다.
object : 실제 커밋의 내용이 저장되고 있는 폴더 + ssh 암호화를 통해 커밋 id 생성
.git 파일 내부 동작원리를 자세하게 알고 싶으면 gitstory를 알아보고 실습해보세요
2. git reset
간단한 동작원리 설명
1)
2)
- local repository에서 커밋을 삭제하는 것!!
- .git에는 여전히 commit기록이 남아있다.(뒤에 자세한 내용 설명)
--hard, --mixed, --soft
명령어 : git reset ( --hard, --mixed, --soft 중 하나) [커밋 id]
- hard : 지정한 커밋 id로 HEAD를 옮기고 그 이후의 커밋, Staging Area, Working Directory는 모두 삭제한다.
- mixed : 지정한 커밋 id로 HEAD를 옮기고 그 이후의 커밋, Staging Area는 삭제하지만 현재 작업 하고 있는 Working Directory의 내용은 보존한다.
- soft : 지정한 커밋 id로 HEAD를 옮기고 그 이후의 커밋은 삭제, 현재 저장되어 있는 Staging Area와 Working Directory는 보존한다.
3. git reset을 복구??
앞서 설명했듯이 우리가 저장한 커밋의 내용은 모두 저장되어 있고 삭제되지 않는다. 앞서 git reset을 통해 삭제한 커밋은 repository 내에서의 삭제이지 여전히 .git에서는 커밋의 내용이 저장되어 있다.
git reflog // reflog 는 각각이 가리키던 commit 들의 히스토리를 기록해둔다.
위의 그림은 git reflog한 모습이다.
위의 명령어를 통해 reset을 했던 모든 내용의 커밋들이 저장되어 있는 것을 볼 수 있다.
git reset --hard HEAD@{7}
위와 같이 다시 한번 reset을 통해 다시 한번 내가 지웠지만 다시 한번 그 내용을 복구할 수 있다.
한 번의 reset과정을 복구
git reset --hard ORIG_HEAD
.git에는 reset과 같은 위험한 명령어를 복구하기 위한 장치가 마련되어있다. 그것은 바로 ORIG_HEAD이다. 만약 reset과 같은 명령어를 입력하게 되면 커밋 레포지토리에서는 삭제하지만 ORIG_HEAD에서는 일단 커밋의 내용을 지우지 않고 나둔다.
하지만 ORIG_HEAD에서 reset을 두 번 이상 할 경우 제일 마지막에 한 reset내용만 저장이 되고 나머지의 reset한 명령은 모두 사라지게 되어서 복구할 수 없다.
출처
생활코딩 git : https://opentutorials.org/course/2708/15305
그 외 블로그 : https://pinocc.tistory.com/194
.git의 이해 : https://jusths.tistory.com/64
git 공식 문서 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EB%82%B4%EB%B6%80-Git-%EA%B0%9C%EC%B2%B4
Author And Source
이 문제에 관하여([GIT] git reset), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@turtle601/GIT-git-reset저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)