git reset 과거 시점으로 되돌리는 방법으로
크게 3가지 옵션이 있다.
* reset 후에는 이전으로 되돌리 수 없으므로 유의해야 한다.
• add 된 파일을 unstaged 상태(add 하기 전)로 되돌린다.
• 변경 내역 자체는 파일에 남아 있다.
--soft
• Staging Area 상태로 돌린다.
(add 한 상태이면서 commit 하기 전 상태)
--mixed (default)
• Wokring Directory 상태로 놓는다
(add 하기 전 상태)
--hard
• 추적(tracked) 되고 있는 파일 변경내역 삭제
• Working Directory에서 삭제하는 것으로
파일 변경 내역을 완전히 삭제하는 것이다.
• Untracked 파일은 Untracked로 그대로 남는다.
Untracked 파일을 관리하고 싶은 경우
commit 취소하고 Staged 상태(commit 전)로 되돌리기
• aa.cpp 와 bb.cpp 파일이 commit 된 상태였는데
commit 하기 전 상태 (add 된 상태)로 되돌린다.
* HEAD는 현재 브랜치를 가리키는 포인터이며,
브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다
commit 취소하고 해당 파일들은 UnStaged 상태(add 전)로 되돌리기
• [commit 파일] aa.cpp와 bb.cpp 을 포함해서
[add 파일] cc.cpp와 dd.cpp 까지 Unstaged 상태로 돌아간 것을 확인할 수 있다.
즉, add 된 파일도 Unstaged 상태로 같이 되돌아 간다.
• --mixed 옵션이 default 이므로 생략해도 된다.
commit 취소와 함께 파일 변경 내역을 모두 없애고 싶을 때
commit 내역은 그대로 두면서 다른 변경 내역을 삭제하고 싶을 때
마지막 2개의 commit 취소
• reset 결과 --mixed 옵션이므로
Staging Area 상태로 돌아온 것을 확인할 수 있다.
• commit 이력도 git log 상에서 없어져 있다.
git reset 유의사항
reset을 하면 되돌리 수 없는 것도 유의해야 하지만
다른 사람과 협업 하는 경우에도 주의할 필요가 있다.
A commit 부터 E commit 까지
push 되어 원격 서버에 반영된 상태라고 해보자.
B commit 까지 reset --hard 하게 되었다.
로컬상에서 commit 이력이 사라졌고, 원격에는 그대로 남아 있는 상태이다.
물론 --force 옵션으로 push 가능하지만
다른 팀원이 기존 commit 받아서
이미 사용하고 있다면 문제가 발생할 수 있다.
📌 [Git 깃] git rebase 위험성 포스팅 내용과 유사하다.
그렇다면 이미 push 해서
원격에 반영된 commit 수정하고 싶은 경우는 어떻게 해야할까.
📌 [Git 깃] git revert
'Git' 카테고리의 다른 글
💻 [Git 깃] 영역별(add, commit, push) 되돌리기 (0) | 2022.08.02 |
---|---|
[Git 깃] git revert (0) | 2022.07.31 |
[Git 깃] git rebase 위험성 (0) | 2022.05.22 |
[Git 깃] git rebase (0) | 2022.05.17 |
[Git 깃] git config (0) | 2022.05.11 |
댓글