git 을 사용하다 여러가지 이유로 뒤에서 작업하던 버전으로 돌아가야 할 때가 있다.
오류가 일어났을 수도 있고 이전 버전에서 분기를 해야할 수도 있고 혹은 새 버전을 어떤 이유로든 사용하지 않을 수도 있을 것이다.
그럴때 사용하는 것이 git reset이다.
git reset은 이전에 만들어진 git log 로 이동하여 작업을 수행할 수 있게 해준다.
먼저 git log를 통해 commit 기록을 보면 다음과 같다.
가장 위 버전이 최신 commit이므로 바로 전 commit으로 이동하는 경우를 보겠다.
git reset은 크게 보면
git reset {commit log}
git reset --soft {commit log}
git reset --hard {commit log}
의 3가지 버전이 있다.
git reset
가장 먼저 git reset은 커밋 이후의 변경사항들이 사라지지 않고 Unstaged changes로 들어간다.
즉 파일의 내용은 바뀌지 않고 그냥 git의 위치만 바뀌는 것이다.
git log를 보면 HEAD가 한 단계 전으로 설정되어 있는 것을 볼 수 있다.
git commit의 단계는 전으로 돌아갔지만, 로컬 파일의 내용은 바뀌지 않았으므로 이 상태에서 git add, git commit을 진행하면 다시 원 상태로 돌아올 것이다.
git reset --soft
git reset --soft는 git reset과 거의 동일하지만 커밋 이후의 변경사항이 Unstaged가 아니라 Staged로 돌아간다는 차이점이 있다.
나머지는 git reset과 동일하다.
git reset --hard
git reset --hard는 commit만 돌리는 것이 아니라 아예 파일의 내용도 이전으로 돌려버린다.
따라서 굉장히 조심스럽게 사용해야 한다.
따라서 로컬의 파일 내용도 모두 바뀌고 변경사항이 존재하지 않는다.
* git reset을 사용할 때 git log로 정확한 id 값을 줄수도 있지만 git reset HEAD ~1 로 몇 단계 전으로 돌아가는 것 역시 가능하다.(1대신 돌아가고 싶은 숫자를 넣으면 된다.)
'CS > devops' 카테고리의 다른 글
git flow-다른 fork에서 fetch merge하기 (0) | 2021.11.30 |
---|---|
git-git flow 사용하기 (0) | 2021.11.26 |
git-commit convention (0) | 2021.11.25 |
git-개인 repo clone, add, commit, push (2) | 2021.11.24 |