reset을 공부하기 전에 HEAD를 일단 알아야 한다.
HEAD란 현재 작업중인 작업트리(Branch)의 가장 최근의 commit을 가리킨다
HEAD에는 ~연산자가 존재하고, HEAD~이동거리
$ git reset --soft HEAD~3
위 처럼 사용 할 수 있다. ^도 사용 할 수 있는데, ^는 HEAD로 부터 이동거리 1
에는 3가지 방식이 있다
$ git reset --soft HEAD^
$ git reset --mixed HEAD^
$ git reset --hard HEAD^
SOFT
: index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.MIXED
: index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)HARD
: index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.add를 취소하는 방법을 위의 reset에서 생각을 해보자
add 하기 전 상태로 되돌려야 하기 때문에 MIXED
또는 HARD
reset을 해주어야 한다.
다만 이때 HARD
reset를 하게 된다면, add 하기 전과 더불에 작성했던 내용들이 다 삭제 되기 때문에 주의 해서 사용해야 한다.
$ git reset --soft HEAD^
$ git reset --mixed HEAD^
or
$ git reset HEAD^ (mixed는 기본)
이미 push된 commit을 지우기 위해서는
1. 되돌리고 싶은 시점으로 commit 취소 먼저 해주고 나서
2. 원하는 부분만 commit을 재실행 해준다.
3. 강제로 push 해준다
이때 원격저장소에는 우리가 원래 저장 한 내용 이외에 다른 내용을 덮어 씌우는 방식이기에 강제적으로 push 해주어야 하고, 이때는 같이 협업하는 이들의 commit log도 수정해주어야 하기에 사용 할때는 조심해서 사용해야 한다.
git을 사용하면서 다시 되돌리는 일을 여러번 해야할 것 같은데 이렇게 확실하게 한번 공부해두니 나중에 사용할 때 어떤걸 사용해야 할지 왜 사용하는지에 대해 잘 알 수 있을것 같다.
늦더라고 정확하게 알고가자🔥
21.08.17 위코드 3주차 화요일