파일 하나 전체를 되돌리려면 (최근 commit 상태로 되돌리려면)
git restore ${file name}
특정 commit 시점으로 되돌리려면
git restore --source ${commit hash} ${file name}
commit hash(커밋id 같은 거)가 뭐냐면, git log 관련 명령어 쳤을 때 노란색으로 표시되는 글자들을 말한다.
특정 파일의 staging을 취소하려면 (add한 거 내릴 때)
git restore --staged ${file name}
특정 commit을 취소하고 싶으면 커밋id를 revert 뒤에 붙이면 된다.
git revert ${commit hash}
그러면 Vim 에디터가 뜨는데,
i를 눌러 커밋 내용 입력하고 esc > :wq 누르면 커밋 메시지 저장된다.
그리고 다시 커밋 log를 찍어보면 알겠지만
특정 커밋을 삭제하는 또 하나의 커밋을 한 것과 똑같다.
여러 개 revert 하려면
git revert ${commit hash 1} ${commit hash 2}
대신 이렇게 하면 커밋이 각각 만들어짐 (2개를 revert 했으면 2번 commit됨)
최근 commit을 취소하려면
git revert HEAD
revert를 취소하고 싶으면
git revert --abort
충돌 해결하고 나서는
git revert --continue
특정 커밋 시점으로 아예 되돌리려면
git reset --hard ${commit hash}
남발하면 당연히 위험하다. 다 날릴 수 있으므로
--hard
는 특정 시점 커밋으로(커밋된 상태) 아예 돌아가고 (그 이후는 삭제)
--soft
는 특정 시점 커밋으로(커밋 전, 즉 staging area에 있는 상태) 돌아간다. 커밋을 다시 할 수 있고, 그 시점 이후 커밋들이 삭제되지 않는다. (특정 시점 커밋을 재커밋하고 싶을 때)
git reset --soft ${commit hash}
--mixed
는 특정 시점 커밋으로 돌아간다(staging조차 되지 않은 상태로. add랑 commit 둘 다 할 수 있는 상태로 ).
git reset --mixed ${commit hash}
--mixed가 기본값이므로 git reset만 입력하면 --mixed와 동일함(add까지 취소)
git 작업을 하다가 실수로 작업들을 날리면
git reflog
여기에 모든 commit 기록이 나오므로
여기서 유실된 커밋id 찾아서 되돌리면 된다.